我有幾個檔案,如下所示。現在,如果檔案中存在中間名,我需要將中間名字段重命名為mid_name。
{
"id":"abc",
"name":[
{
"first_name":"abc",
"last_name":"def"
},
{
"first_name":"ghi",
"last_name":"mno",
"middilename":"xyz"
}
]
}
這是我所期望的。
{
"id":"abc",
"name":[
{
"first_name":"abc",
"last_name":"def"
},
{
"first_name":"ghi",
"last_name":"mno",
"mid_name":"xyz"
}
]
}
這就是我所做的,但它會引發錯誤。
db.md_carrierInformation.updateMany({"name.middlename":{$exists:true}}, {$rename:{"name.$.middlename":"name.mid_name"}})
錯誤
MongoServerError:$rename 的源欄位可能不是動態的:name.$.middlename
uj5u.com熱心網友回復:
使用聚合管道進行更新。
$set- 設定name陣列欄位。1.1。
$map- 迭代陣列中的每個專案name并回傳新陣列。1.2. -不存在
$cond檢查當前檔案的條件。middlename1.2.1。如果
true,將當前檔案與帶有欄位的檔案mid_name合并$mergeObjects。1.2.2。如果
false,則保留現有檔案。$unset- 洗掉欄位name.middlename。
db.md_carrierInformation.updateMany({
"name.middlename": {
$exists: true
}
},
[
{
$set: {
"name": {
$map: {
input: "$name",
in: {
$cond: {
if: {
$ne: [
"$$this.middlename",
undefined
]
},
then: {
$mergeObjects: [
"$$this",
{
mid_name: "$$this.middlename"
}
]
},
else: "$$this"
}
}
}
}
}
},
{
$unset: "name.middlename"
}
])
示例 Mongo Playground
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/497669.html
標籤:mongodb 猫鼬 mongodb查询 nosql mongodb-更新
