【问题标题】:Query model with array in mongodb在mongodb中使用数组查询模型
【发布时间】:2019-03-02 12:57:18
【问题描述】:

我是 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

非常感谢任何帮助。

【问题讨论】:

  • 查找查询返回数组。所以这里gdoc 是一个数组,您要么需要循环gdoc 并控制台值或控制台gdoc[0].companies
  • 对于 MongoDB,最简单的方法是首先在控制台中使用查询来查看它们是否有效,您无需运行任何东西,stdout/stderr 就直接在那里
  • @Anthony 有没有其他方法可以返回所有 id 但不在数组中。谢谢你。
  • 你能解释一下你真正需要什么吗?

标签: arrays node.js mongodb mongoose


【解决方案1】:

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

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

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

【讨论】:

  • 如果我在一个数组中有 2 个元素,那么它将是 gdoc[0] 和 gdoc[1]。任何其他避免运行 gdoc 循环的方法。
  • @PrithvirajMitra 无论如何你都必须遍历它们
【解决方案2】:

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

  • 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)

【讨论】:

  • 是的,我正在混合两者。它工作得很好。我以这种方式获得了数组中的 id -- var companies = [].concat(...gdoc.map(doc => doc.companies));
【解决方案3】:

试试这个,

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

}, (err) => {

});

【讨论】:

    猜你喜欢
    • 2013-04-11
    • 2017-05-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-04
    • 1970-01-01
    • 2019-04-05
    相关资源
    最近更新 更多