Mongodb:如何从另一个集合中获取“查找”条件?

时间:2019-10-17 15:35:47

标签: mongodb

就像这样的SQL一样:

select * from t1 where id > (select id from t2 where name='abc')

是否可以在一个mongodb查询中完成此操作?

1 个答案:

答案 0 :(得分:-1)

您应该可以使用$ lookup。 $ lookup用于在另一个集合中查找文档,它的工作方式更像是联接。一个例子如下。

db.users.aggregate([{
  $lookup: {
     from: "countries",
     localField: "country",
     foreignField: "_id",
     as: "cname"
  }
}])

在上述查询中,您将用户集合中的记录与字段country = _id上的国家/地区集合进行匹配。

然后,您可以在查找内部引入管道协议,以应用过滤器。我从mongodb文档中挑选了一个供您参考的示例

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"
         }
    }
])

您可以在官方MongoDB document for lookup

上找到很好的解释和示例。