具有集合和动态查询输出的mongodb查找

时间:2018-07-20 04:37:22

标签: node.js mongodb nosql

我对集合有一些动态查询

var condition = dynmic_query
db.collection.find(condition)

正在给我输出

现在我需要从先前查询中得到的内容,需要使用另一个集合进行查找。

如果在mongodb中还无法做到这一点,我会感到恐惧

[https://jira.mongodb.org/browse/SERVER-22497]

我做了一些谷歌,但不知道如何实现这一目标

我必须在node.js中执行此查询

请帮助

谢谢

3 个答案:

答案 0 :(得分:0)

您不能在第二个查询中使用一个查询输出。但是您需要在代码级别进行处理。

打一个查询并将结果保存在一个变量中,然后使用该结果搜索另一个查询。

Mongodb不适用于复杂的访存。这就是它为您提供高性能的全部原因。

答案 1 :(得分:0)

听起来您需要Aggregation Framework$lookup管道阶段以及$match管道。这有点像从SQL世界中进行JOIN。这是一个示例:

db.orders.aggregate([
   {
      $lookup:
         {
           from: "warehouses",
           let: { order_item: "$item", order_qty: "$ordered" },
           pipeline: [
              { $match:
                 { $expr:
                    { $and:
                       [
                         { $eq: [ "$stock_item",  "$$order_item" ] },
                         { $gte: [ "$instock", "$$order_qty" ] }
                       ]
                    }
                 }
              },
              { $project: { stock_item: 0, _id: 0 } }
           ],
           as: "stockdata"
         }
    }
])

答案 2 :(得分:0)

您可以轻松地进行汇总查询:

  1. 匹配
  2. 查找

示例:

var condition = dynmic_query

db.collection.aggregate([
    {
        $match: condition
    },
    {
        $lookup: {
            from: "collectionName",
            localField: "ref",
            foreignField: "ref_in_foreign_collection",
            as: "foo"
        }
    }
])

现在,您将以数组的形式在每个对象的 foo 中获得联接数据。

希望它可以解决您的查询。