如何使用mongodb合并两个集合结果和另一个集合

时间:2019-06-21 11:58:06

标签: mongodb mongoose mongodb-query aggregation-framework

我尝试将两个集合输出和一个集合连接在一起,但是如何使用mongodb将两个集合结果连接到一个集合中却不起作用

促销收藏

[{
    "id":1,
    "name":"latest",
    "product":[{
                 "id":3,
              }]

}]

产品系列

[{
     "id":3,
     "product_name":"bourbon",
     "category_id": 18
}]

类别集合

[{
   "id":10,
   "name":"laptop"
}]

映射代码

db.promotion.aggregate([{$lookup:{
            from:'product',
            localField:'products',
            foreignField:'id',
            as:'products'
        }}]).toArray()

我得到了输出

[{
    "id":1,
    "name":"latest",
    "product":[{
                 "id":3,
                  "product_name":"bourbon",
                  "category_id": 18
              }]

}]

例外的输出

[{
    "id":1,
    "name":"latest",
    "product":[{
                 "id":3,
                  "product_name":"bourbon",
                  "name":"laptop"
              }]

}]

如何实现它。这种情况

1 个答案:

答案 0 :(得分:1)

您可以使用以下汇总

db.promotion.aggregate([
  { "$lookup": {
    "from": "product",
    "let": { "products": "$products" },
    "pipeline": [
      { "$match": { "$expr": { "$eq": ["$id", "$$products"] } } },
      { "$lookup": {
        "from": "category",
        "let": { "category_id": "$category_id" },
        "pipeline": [
          { "$match": { "$expr": { "$eq": ["$id", "$$category_id"] } } }
        ],
        "as": "category"
      }},
      { "$project": {
        "id": 1,
        "product_name": "bourbon",
        "name": { "$arrayElemAt": ["$category.name", 0] }
      }}
    ],
    "as": "product"
  }}
])