我使用的是Nodejs
,mongodb
数据库。我们可以像这样使用$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
的项目。
发布于 2012-04-18 11:39:23
$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 } } );
...
如果你对数组不太了解,我建议你读一读这篇文章:
发布于 2015-08-18 13:55:27
现在还不能评论,但只想在这里补充一句,new ObjectID()
不适合我,但是new ObjectId()
(小写d)可以。希望这对某些人有帮助。
https://stackoverflow.com/questions/10208339
复制