【问题标题】:How to join two collection result and another collection using mongodb如何使用 mongodb 加入两个集合结果和另一个集合
【发布时间】:2019-06-21 11:58:06
【问题描述】:

我尝试加入两个集合输出和一个集合。但是它不起作用如何加入两个集合结果使用 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"
              }]

}]

如何实现。这个场景

【问题讨论】:

    标签: mongodb mongoose mongodb-query aggregation-framework


    【解决方案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"
      }}
    ])
    

    【讨论】:

    • @Fanpark .如何学习mongodb聚合和管道框架可以给一些建议或任何视频链接
    • 当然我会用解释更新我的问题
    • 如果你使用猫鼬,你可以使用填充
    • 对不起,我使用了 mongoclient
    猜你喜欢
    • 2020-05-12
    • 2021-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-10
    • 2020-09-03
    • 1970-01-01
    相关资源
    最近更新 更多