【问题标题】:Nodejs,mongodb - using $nin or $in for object ids or _idNodejs,mongodb - 使用 $nin 或 $in 作为对象 ID 或 _id
【发布时间】:2012-04-29 19:15:37
【问题描述】:

我正在使用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 的那些项目之外,我应该得到所有项目。

【问题讨论】:

    标签: node.js mongodb object


    【解决方案1】:

    $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

    【讨论】:

    • 你的代码可以工作,但情况是,我有一个字符串 str="nfsdfnskdjnjdf","ksjdngdfg","gseggxfzgd".... 这可以有很多内部字符串,而不仅仅是 2 个。从这里,我怎样才能得到你告诉我的数组,请告诉我那个。谢谢
    • var str="nfsdfnskdjnjdf,ksjdngdfg,gseggxfzgd"; var ids = str.split(","); // ids 现在是一个拆分数组,
    【解决方案2】:

    目前无法发表评论,但只想在此处添加 new ObjectID() 对我不起作用,但 new ObjectId()(小写 d)确实起作用。希望这对某人有所帮助。

    【讨论】:

    • 我已经获得了编辑和评论的特权,所以这个评论不再相关,但接受的答案的代码现在可以复制/粘贴!
    猜你喜欢
    • 2016-03-14
    • 1970-01-01
    • 2011-12-07
    • 2019-07-24
    • 2016-02-17
    • 1970-01-01
    • 2020-07-29
    • 2020-03-07
    • 1970-01-01
    相关资源
    最近更新 更多