【问题标题】:How to rename the columnname in mongodb using node js如何使用节点js重命名mongodb中的列名
【发布时间】:2019-10-22 14:35:42
【问题描述】:

我试图映射两个集合,它工作正常,但我对如何使用 mongodb 重命名列名有疑问。

促销合集

{ 
    "_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"
                   }
        },  
        {
           $project :{products :{_id:0}}  
        }

     ]
) 

我得到了输出

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

预期输出

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

如何使用 mongodb 将产品名称重命名为名称

【问题讨论】:

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


    【解决方案1】:

    您可以通过products 数组 $map 并可以更改字段名称

    db.promotional.aggregate([
      { "$lookup": {
        "from": "product",
        "localField": "products",
        "foreignField": "_id",
        "as": "products"
      }},
      { "$addFields": {
        "products": {
          "$map": {
            "input": "products",
            "as": "product",
            "in": {
              "name": "$$product.product_name"
            }
          }
        }
      }}
    ])
    

    如果你使用的是 3.6 及以上版本的 mongodb

    db.promotional.aggregate([
      { "$lookup": {
        "from": "product",
        "let": { "products": "$products" },
        "pipeline": [
          { "$match": { "$expr": { "$in": [ "$_id", "$$products" ] } } },
          { "$project": { "name": "$product_name", "_id": 0 }}
        ],
        "as": "products"
      }}
    ])
    

    【讨论】:

    • @Fanpark 我想重命名函数在 {$project:{products :{"$name":product_name}}} 中使用与否
    • @HariSmith 如果它有效,那么我可能会这样回答。但事实并非如此。这是一个对象结构{products :{"$name":product_name}} 你不能在array 里面添加键。
    • 谢谢它的工作正常。你能解释一下它是如何工作的
    猜你喜欢
    • 2017-11-15
    • 2020-09-25
    • 2012-03-04
    • 1970-01-01
    • 2016-07-27
    • 2011-09-15
    • 2011-08-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多