MongoDB中具有数组的查询模型

时间:2018-09-26 17:11:09

标签: arrays node.js mongodb mongoose

我是Node和MongoDB的新手。

我正在尝试使用数组查询模型。

数组看起来像这样

 var grArr =  [ '5aabc39a3d88101e4b52c861', '5ac3a1fe83d45353bc6a995c' ]

查询为

Group.find().where({ _id: { $in: grArr }}).exec(function(err,gdoc){
      if(err)
      {
         callback({err:err,message:"Error looking up company"});
      }
      else
      {
         console.log(gdoc.companies); //Gives undefined
         callback(null,gdoc.companies);
      }
});

查询返回undefined

我们非常感谢您的帮助。

3 个答案:

答案 0 :(得分:2)

有两种方法可以用猫鼬执行查询,在我看来,您正在混合使用这两种方法。

  • Find应该以您的查询作为参数来调用:

你会得到类似的东西

Group.find({ _id: { $in: grArr }}, function(err,gdoc){
      if(err) {
         callback({err: err, message:"Error looking up company"});
      }
      else {
         console.log(gdoc); //Should print all the matching documents since gdoc is an array
         callback(null, gdoc.map(doc => doc.companies); //returns every companies of every document
      }
});

这一次您可以调用不带任何参数的Find并像这样链接where语句

Group.find({}).where('_id').in(grArr).exec(callback)

答案 1 :(得分:0)

find()将数组传递给了回调函数。请参阅文档https://mongoosejs.com/docs/api.html#model_Model.find

gdoc是数组。像这样编辑代码:

...
callback(null, gdoc[0].companies);
...

答案 2 :(得分:0)

尝试一下

Group.find({ _id: { $in:arr }).lean().exec().then((result) => {

}, (err) => {

});