簡體   English   中英

在數組中每個 object 末尾添加新鍵

[英]Add New key at the end of each object inside an array

我從一個集合中獲得了來自 mongodb 的數據。

/* 1 */
{
    "_id" : ObjectId("5be94355f220b62c7449dc0f"),
    "districts" : [ 
        {
            "name" : "NORTH AND MIDDLE",
            "code" : 632.0
        }, 
        {
            "name" : "EAST",
            "code" : 603.0
        }, 
        {
            "name" : "SOUTH",
            "code" : 602.0
        }
    ],
    "state" : "ISLANDS"
}

/* 2 */
{
    "_id" : ObjectId("5be94355f220b62c7441dc04"),
    "districts" : [ 
        {
            "name" : "Apple",
            "code" : 512.0
        }, 
        {
            "name" : "Ball",
            "code" : 522.0
        }
    ],
    "state" : "GOLD"
}

/* 3 */
{
    "_id" : ObjectId("5eee07816a011d391a45178"),
    "districts" : [ 
        {
            "name" : "DAM",
            "code" : 478.0
        }, 
        {
            "name" : "DEN",
            "code" : 481.0
        }, 
        {
            "name" : "DOG AND CAT",
            "code" : 461.0
        }
    ],
    "state" : "THE NAGAR AND HAVELI"
}

我得到了一張 excel 表,如下所示,沒有其他信息,只有 2 列

在此處輸入圖像描述

我的工作是為所有地區添加“地區簡稱”。

我嘗試了以下方法

var tc = [
    "NORTH AND MIDDLE",
    "EAST",
    "SOUTH",
    "Apple",
    "Ball ",
    "DAM ",
    "DEN ",
    "DOG AND CAT"
]
 

db.dummy.find({"districts.name":{$in:tc}}).forEach(x => {
    x["districts"].forEach( y => {
        if (   
        y.name == "NORTH AND MIDDLE" ){
            y.short_name  = "NAM"
        }
        if (   
            y.name == "EAST" ){
                y.short_name  = "ET"
            }

        if (   
            y.name == "SOUTH" ){
                y.short_name  = "ST"
            }
    })
})

我得到了結果

/* 1 */
{
    "_id" : ObjectId("5be94355f220b62c7449dc0f"),
    "districts" : [ 
        {
            "name" : "NORTH AND MIDDLE",
            "code" : 632.0,
            "short_name" : "NAM"
        }, 
        {
            "name" : "EAST",
            "code" : 603.0,
        "short_name" : "ET"
        }, 
        {
            "name" : "SOUTH",
            "code" : 602.0,
        "short_name" : "ST"
        }
    ],
    "state" : "ISLANDS"
}

/* 2 */
{
    "_id" : ObjectId("5be94355f220b62c7441dc04"),
    "districts" : [ 
        {
            "name" : "Apple",
            "code" : 512.0,
        "short_name" : "Al"
        }, 
        {
            "name" : "Ball",
            "code" : 522.0
        "short_name" : "BA"
        }
    ],
    "state" : "GOLD"
}

/* 3 */
{
    "_id" : ObjectId("5eee07816a011d391a45178"),
    "districts" : [ 
        {
            "name" : "DAM",
            "code" : 478.0,
        "short_name" : "DA"
        }, 
        {
            "name" : "DEN",
            "code" : 481.0,
        "short_name" : "DN"
        }, 
        {
            "name" : "DOG AND CAT",
            "code" : 461.0
        "short_name" : "DAC"
        }
    ],
    "state" : "THE NAGAR AND HAVELI"
}

這是唯一的方法嗎?? 就像對所有地區使用 if 循環或任何其他方法一樣,例如使用 mongodb 聚合或任何其他 javascript 方法。 如果有其他方法會很有幫助,因為當有 730 個分區時使用 if 循環會出現問題。 我沒有使用聚合框架的經驗,所以我認為任何人都可能知道其他方法。

你可以寫一個映射:

const districtNameToShort = {
  'NORTH AND MIDDLE': 'NAM',
  'EAST': 'ET',
  ...
}

然后在你的 forEach

const districtNameToShort = {
  'NORTH AND MIDDLE': 'NAM',
  'EAST': 'ET'
}
db.dummy.find().forEach(x => {
  db.dummy.update(
    {_id : x._id},
    {$set: {
      districts: x.districts.map(district => {
        district.short_name = districtNameToShort[district.name] || district.name
        return district
      })
    }}
  )
})

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM