我有一個看起來像這樣的 mongodb 集合:
{
"_id" : ObjectId("60471bd482c0da3c0e70d26f"),
"owner" : "John",
"propAvailable" : {
"val1" : true
}
},
{
"_id" : ObjectId("60471bd482c0da3c0e76523f"),
"owner" : "Matt",
"propAvailable" : {
"val1" : {
"val2" : true
}
}
我需要在這個集合上運行一個更新查詢,它將更新“propAvailable”鍵的值,這樣
>> db.collection('props').update({'owner' : 'John'} , {$set : {'propAvailable.val1.val2' : true}});
如果檔案已經看起來像第二個但給出錯誤,則此查詢有效
:如果檔案格式是第一個,則無法在元素 {'val1': true} 中創建欄位'val2' 。有沒有辦法撰寫此查詢,以便它覆寫布林值“true”并將其替換為物件{'val2' : true}
uj5u.com熱心網友回復:
您可以使用:
db.collection.update({
"owner": "John"
},
{
$set: {
"propAvailable.val1": {
val2: true
}
}
})
val2: true在里面創建propAvailable.val1并替換它當前的內容。
如您所見,在操場上作業
uj5u.com熱心網友回復:
如果您使用的是 Mongo 4.2 版,則可以使用管道更新來實作這一點,如下所示:
db.collection.updateMany({
owner: "John"
},
[
{
$set: {
"propAvailable.val1": {
$mergeObjects: [
{
$cond: [
{
$eq: [
"object",
{
$type: "$propAvailable.val1"
}
]
},
"$propAvailable.val1",
{}
]
},
{
val2: true
}
]
}
}
},
])
蒙戈游樂場
val1對于較舊的 mongo 版本,如果物件可能具有要保留的其他欄位,則無法在 1 個查詢中執行此操作。您將不得不閱讀和更新,或者為每種情況執行兩個不同的更新。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/462456.html
