2016-02-05 64 views
1

我正在使用猫鼬。Mongoose或运算符_id

当我做到这一点,它工作正常:

userModel.find({ $or:[ 
         {first_name:"Bob"}, 
         {last_name: "Marley"} 
         ] 
       }, function(err, result){ 
       if(err) //do something; 

       console.log(result); 
       }); 

但是当我使用_id作为其中的一个表达式,它只会寻找_id,不关心其他表达式:

userModel.find({ $or:[ 
         {_id: "56b426aa1d6c7a642ab1a52d"}, 
         {last_name: "Marley"} 
         ] 
       }, function(err, result){ 
       if(err) //do something; 

       console.log(result); 
       }); 

概述: 第一个例子会找到名字鲍勃或姓氏马利。 但第二个例子只能找到我提供的确切id或null。

我在做什么错?

+0

你可以提供一个文件样本证明了这一点?还打开调试,看看猫鼬是如何发送语句'mongoose.set(“Debug”,true)' –

+0

对不起,我没有注意到它产生了一个错误。 错误被转换为ObjectId失败。我已经为_id的值添加了一个字符,并使ObjectId无效。 无论如何感谢。 – hex20dec

回答

0

MongoDB的_id场是一种特殊类型的字段和需求,进行初始化如下,才可以在查询中使用:

new Mongoose.Types.ObjectId("56b426aa1d6c7a642ab1a52d") 

var ObjectId = require('mongoose').Types.ObjectId; 
new ObjectId("56b426aa1d6c7a642ab1a52d");