不幸的是,我只能在 stackoverflow 上找到非常具體的問題,并且在檔案中沒有確切的細節,所以這里有一個更一般的例子,它也可以幫助其他人。
我只想用“title:'title3”向物件中的陣列(arr)添加一個值。
{
_id: <id>,
prop1: val1,
prop2: val2,
prop3: [
{
title: 'title1',
arr: ['val1', 'val2', 'val3'],
},
{
title: 'title2',
arr: ['val1', 'val2', 'val3'],
},
{
title: 'title3',
arr: ['val1', 'val2', 'val3'], //only update this array
}
]
}
我目前的方法看起來像這樣:
SomeModel.findOneAndUpdate(
{ _id: id, "prop3.title": "title3" },
{$push: { "prop3.$[].arr": someDoc._id.toString() }},
(err, doc) => {
if (err) {
console.log('Error updating doc: ', err);
resolve(false);
} else {
resolve(doc);
}
}
);
但是,這里的問題是,不僅在標題為“title3”的物件的陣列中添加了一個值,而且在任何地方都添加了一個值。
如何將一個值專門添加到標題值為“title3”的物件中的陣列?我也將非常感謝解釋這一點的檔案鏈接。
uj5u.com熱心網友回復:
您可以通過這種方式使用位置$運算子在單個操作中執行此操作:
使用$你告訴 mongo “更新在查找階段找到的物件”。在這種情況下“更新物件在哪里prop3.title” title3。
請注意,您使用的是arrayFilters而不是位置運算子。
db.collection.update({
"_id": 1,
"prop3.title": "title3"
},
{
"$push": {
"prop3.$.arr": "val4"
}
})
這里的例子
uj5u.com熱心網友回復:
這是一種在您的完整背景關系中可能有意義或可能沒有意義的解決方案。
使用mongoose Document.save()方法會更幸運。獲得檔案的本地副本后,您可以簡單地推送到陣列:
const doc = await SomeModel.findOne({
_id: id,
"prop3.title": "title3"
});
doc.prop3[3].arr.push(item);
await doc.save();
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/419441.html
標籤:
