2012-04-18 97 views
6

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

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

上面的字像uname和其他法线元素。但对于对象ID(_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的项目以外的所有项目。

回答

9

$ 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

+0

ur代码工作,但情况是,我有一个字符串str =“nfsdfnskdjnjdf”,“ksjdngdfg”,“gseggxfzgd”....这可以有许多内在的字符串,而不仅仅是2.从这个,如何可以我收到了你告诉我的阵列,请告诉我那一个。谢谢 – user1305989 2012-04-18 11:47:25

+0

'var str =“nfsdfnskdjnjdf,ksjdngdfg,gseggxfzgd”; var ids = str.split(“,”); ' // ids现在是一个数组,分裂, – Menztrual 2012-04-18 11:49:25

+0

谢谢,工作! – user1305989 2012-04-18 11:54:21

5

无法尚未就此发表评论,但只是想补充一点,new ObjectID()不适合我,但new ObjectId()(小写字母d)确实有效。希望这可以帮助某人。

+0

我从此获得编辑和评论的权利,因此此评论不再相关,但接受的答案代码现在是复制/粘贴的! – wolstat 2017-07-18 19:18:52