7

我正在使用Nodejsmongodb数据库。我们可以$nin这样 使用

Model.find({ uname : { $nin : ["sachin","saurav"] } }....

以上为法线元素之类的词uname和其他词。但是对于对象 ids(_id),..

Model.find({_id : {$nin : ["6534767457dfgbyb23","wtvwt3wy5etvdh"] } } ...

上面的行没有给出错误,它显示正确..

var ObjectID = require('mongodb').ObjectID;
var a = new ObjectID("sdfsdznfsdz");
var b=new ObjectID("sdfjwneufhq2rfwefsd");
Model.find({_id : { $nin : [a,b] } }...

上面也没有给出错误...

问题是,我不能像 a,b,c,d 那样手动编写...

我必须以某种正确的格式将所有这些 a,b,c,d... 存储在某个变量中,并且必须这样做

Model.find({_id : {$nin : variable } }

或者

Model.find({_id : {$nin : [variable] } }

我试过这个

var string = a+","+b //this didnt work, error : invalid object id
var string = "nfw34qfhrs9"+","+"u89tgngnfdb"  //this also same error
var string = "\"jn4tr43r\""  +  "," + "\"ansfuw37fe\""  //this also same error 

我该怎么办?问题是,我应该得到所有项目,除了那些_ids.

4

2 回答 2

12

$nin 在 mongo 中的工作方式是它需要一个值数组来检查。

代码: var string = a+","+b不使它成为一个有效的数组。当您创建具有值的字符串时sdfsdznfsdz, u89tgngnfdb

所以 $nin 将数组视为该值,而不是您尝试实现的方式。

做你想做的事情的解决方案是用这些值创建一个数组。

所以像:

var ids = new Array( new ObjectId("1124edcef241"), new ObjectId("56943decfeca845") );

// Dont put [ ] as a parameter. Just send a variable thats an array     
Model.find( {_id : { $nin : ids } } ); 
...

以防您对数组有点模糊,我建议您阅读以下内容:

http://www.w3schools.com/js/js_obj_array.asp

于 2012-04-18T11:39:23.137 回答
5

尚无法发表评论,但只是想在此处添加new ObjectID()对我不起作用的内容,但是new ObjectId()(小写 d)确实有效。希望这可以帮助某人。

于 2015-08-18T13:55:27.210 回答