Nodejs,mongodb - 对象id或_id使用$ nin或$ in

use*_*989 7 object mongodb node.js

我正在使用Nodejs,mongodb数据库.我们可以用$nin这样的

Model.find({ uname : { $nin : ["sachin","saurav"] } }....
Run Code Online (Sandbox Code Playgroud)

正常元素uname和其他元素的上面的单词.但是对于对象id(_id),..

Model.find({_id : {$nin : ["6534767457dfgbyb23","wtvwt3wy5etvdh"] } } ...
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

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

Model.find({_id : {$nin : variable } }
Run Code Online (Sandbox Code Playgroud)

要么

Model.find({_id : {$nin : [variable] } }
Run Code Online (Sandbox Code Playgroud)

我试过这个

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 
Run Code Online (Sandbox Code Playgroud)

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

Men*_*ual 11

$ 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 } } ); 
...
Run Code Online (Sandbox Code Playgroud)

只是因为你对数组有点朦胧,我建议读一下这个:

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


wol*_*tat 5

还没有评论,但只是想在这里添加new ObjectID()不适合我,但new ObjectId()(小写d)确实有效.希望这有助于某人.