【问题标题】:How to merge result from $lookup with subdocuments如何将 $lookup 的结果与子文档合并
【发布时间】:2020-04-15 13:25:37
【问题描述】:

考虑以下玩具示例:

收藏shops

{
  "products": [
    { id: "abc", price: 20.5 },
    { id: "abd", price: 34.0 }
  ]
}

收藏products

{
  _id: "abc",
  name: "Apple"
}

运行以下查询...

db.shops.aggregate([
  {
    $lookup: {
      from: "products",
      localField: "products.id",
      foreignField: "_id",
      as: "product_info"
    }
  }
])

返回...

[{
  "products": [
    { id: "abc", price: 20.5 },
    { id: "abd", price: 34.0 }
  ],
  "product_info": [
    { _id: "abc", name: "Apple" },
    { _id: "abd", name: "Orange" }

  ]
}]

有没有办法“合并”productsproduct_info 以获得以下内容?

[{
  "products": [
    { id: "abc", price: 20.5, name: "Apple" },
    { id: "abd", price: 34.0, name: "Orange" }
  ],
}]

感谢您的帮助!

【问题讨论】:

    标签: javascript mongodb mongodb-query aggregation-framework aggregate


    【解决方案1】:

    你可以使用下面的聚合

    db.shops.aggregate([
      { $unwind: "$products" },
      {
        $lookup: {
          from: "products",
          localField: "products.id",
          foreignField: "_id",
          as: "products.name"
        }
      },
      { $unwind: "$products.name" },
      { $addFields: { "products.name": "$products.name.name" }},
      { $group: {
        _id: "$_id",
        products: {
          $push: "$products"
        }
      }}
    ])
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-12-22
      • 2021-10-04
      • 2018-04-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-15
      • 2019-05-15
      相关资源
      最近更新 更多