mongodb lookup pipeline localfield

$lookup 是 MongoDB 中的一个聚合管道操作符,用于在一个集合中查找与另一个集合中的文档相关联的文档,并将它们合并在一起。

$lookup 操作中,可以指定一个 localField ,表示当前集合中的字段名,它将用于在当前集合中查找与另一个集合相关联的文档。另一个集合中的字段可以通过指定 foreignField 来指定。例如:

db.orders.aggregate([
      $lookup:
           from: "products",
           localField: "product_id",
           foreignField: "_id",
           as: "product"

上面的代码将在 orders 集合中查找所有的订单,然后将每个订单的 product_id 字段与 products 集合中的 _id 字段进行比较,找到与之相关联的商品信息。结果将会将匹配到的商品信息存储在一个新的 product 数组中。

值得注意的是,localFieldforeignField 都可以是任意字段,只要它们在两个集合之间建立了关联即可。

另外,如果要在当前集合中使用某个字段的子字段来进行查询,可以使用 $lookup 中的 letpipeline 子句来实现。例如:

db.orders.aggregate([
      $lookup:
           from: "orderDetails",
           let: { order_id: "$_id" },
           pipeline: [
              { $match:
                 { $expr:
                    { $eq: [ "$order_id",  "$$order_id" ] }
              { $project: { item: 1, price: 1 } }
           as: "orderDetails"

上面的代码将在 orders 集合中查找所有的订单,然后将每个订单的 _id 字段存储在 let 变量 order_id 中。接着,在 $lookuppipeline 中使用 $match 来筛选 orderDetails 集合中与当前订单相关联的文档,条件是 order_id 等于 $$order_id。最后,使用 $project 子句来指定 itemprice 字段,作为最终结果的一部分。

  •