MongoDB 将字段添加到文档中的数组中

问题描述 投票:0回答:1

我有一个如下添加的文档

{
  "bookingReference": "225360",
  "portOfDestination": "TRKSP",
  "contactPerson": "FAHRI YUMUSAK TRANS.",
  "cargoDetails": [
    {
      "quantity": "123",
      "unitType": "123",
      "cargoDescription": "123",
      "cargoGrossWeight": 123
    }
  ],
  "passengerDetails": [
    {
      "quantity": "123",
      "unitType": "123",
      "passengerDescription": "123"
    },
    {
      "quantity": "1234",
      "unitType": "1234",
      "passengerDescription": "1234"
    }
  ]
}

问题是我想将 contactPerson 添加到数组 PassengerDetails 中的每个对象。 所以添加后数组passengerDetails应该看起来像

"passengerDetails": [
    {
      "quantity": "123",
      "unitType": "123",
      "passengerDescription": "123",
      "contactPerson": "FAHRI YUMUSAK TRANS."
    },
    {
      "quantity": "1234",
      "unitType": "1234",
      "passengerDescription": "1234",
      "contactPerson": "FAHRI YUMUSAK TRANS."   
    }
  ]

我可以通过 $addFields 来实现此目的,当乘客详细信息数组为空/空/不存在时就会出现问题。我希望应创建passengerDetails 的单个对象并将其添加到passengerDeails 中。最终结果应该是。

"passengerDetails": [
    {
      "contactPerson": "FAHRI YUMUSAK TRANS."
    }
  ]

如果我使用 $addFields 那么对于后面的情况 mongo 会生成类似的东西

"passengerDetails": 
    {
      "contactPerson": "FAHRI YUMUSAK TRANS."
    }

请帮忙解决这个问题

我尝试使用 addFields 但我的所有用例都没有得到满足。

mongodb mongodb-query
1个回答
0
投票

你的

passengerDetails
是一个数组字段。您可以使用
$map
迭代项目,并使用
$mergeObjects
设置
contactPerson

的字段
db.collection.update({},
[
  {
    $set: {
      passengerDetails: {
        $map: {
          input: "$passengerDetails",
          as: "pd",
          in: {
            $mergeObjects: [
              "$$pd",
              {
                "contactPerson": "$contactPerson"
              }
            ]
          }
        }
      }
    }
  }
],
{
  multi: true
})

蒙戈游乐场

© www.soinside.com 2019 - 2024. All rights reserved.