【问题标题】:How to show particular columns in mongodb?如何在 mongodb 中显示特定列?
【发布时间】:2019-10-21 15:05:02
【问题描述】:

我有两个集合(促销、产品)和产品集合映射到促销它工作正常。但我怀疑如何在产品集合中显示特定列。

促销合集

{ 
    "_id" : ObjectId("5cf7679a0b0bed2e7483b998"),   
    "group_name" : "Latest",   
    "products" : 
   [ObjectId("5cecc161e8c1e73478956333"),ObjectId("5cecc161e8c1e73478956334")]
}  

产品系列

{ 
    "_id" : ObjectId("5cecc161e8c1e73478956333"), 
    "product_name" : "bourbon"
},
{ 
    "_id" : ObjectId("5cecc161e8c1e73478956334"), 
    "product_name" : "bour"
}

映射查询

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

我尝试将产品集合映射到促销集合

我得到了输出

{ 
    "_id" : ObjectId("5cf7679a0b0bed2e7483b998"),   
    "group_name" : "Latest",   
    "products" : 
     [
       { 
         "_id" : ObjectId("5cecc161e8c1e73478956333"), 
         "product_name" : "bourbon"
       },
       { 
       "_id" : ObjectId("5cecc161e8c1e73478956334"), 
       "product_name" : "bour"
       }
     ]
}

预期输出

{ 
    "_id" : ObjectId("5cf7679a0b0bed2e7483b998"),   
    "group_name" : "Latest",   
    "products" : 
     [
       {  
         "product_name" : "bourbon"
       },
       {  
       "product_name" : "bour"
       }
     ]
}

【问题讨论】:

标签: node.js mongodb mongodb-query aggregation-framework


【解决方案1】:

您可以使用$project 运算符排除这些列:

db.promotional.aggregate(
    [
        {
        $lookup: {
                from: "product",
                localField: "products",
                foreignField: "_id",
                as: "products"
            }
        },
        {
            $project: {
                "products._id": 0
            }
        }
    ]
) 

【讨论】:

    【解决方案2】:
    db.promotional.aggregate([
    {
                        $lookup: {
                            from: "product",
                            localField: "products",
                            foreignField: "_id",
                            as: "products"
                        }
                    },{$project :{products :{product_name : 1}}}
    ])
    

    【讨论】:

      【解决方案3】:
      db.getCollection("promotional").aggregate(
      
          // Pipeline
          [
              // Stage 1
              {
                  $unwind: {
                      path: "$products"
      
                  }
              },
      
              // Stage 2
              {
                  $lookup: {
                      from: "product",
                      localField: "products",
                      foreignField: "_id",
                      as: "products"
                  }
              },
      
              // Stage 3
              {
                  $group: {
                      _id: {
                          _id: '$_id',
                          group_name: '$group_name'
                      },
                      products: {
                          $push: {
                              product_name: {
                                  $arrayElemAt: ["$products.product_name", 0]
                              }
                          }
                      }
                  }
              },
      
              // Stage 4
              {
                  $project: {
                      _id: '$_id._id',
                      group_name: '$_id.group_name',
                      products: 1
                  }
              },
      
          ]
      
      
      
      );
      

      【讨论】:

        猜你喜欢
        • 2019-11-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-11-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-10-10
        相关资源
        最近更新 更多