所以我嘗試了幾種方法,但我不能,我可以用相同的鍵修改多個物件但我不能用不同的鍵修改任何物件,如果有人可以幫助我是一個相當復雜的問題
{
id: 123,
"infos": [
{ name: 'Joe', value: 'Disabled', id: 0 },
{ name: 'Adam', value: 'Enabled', id: 0 }
]
};
在我的資料庫中,我有一個集合,其中包含一個陣列和幾個物件,其中給出了這個。
我想修改這些物件,按它們的名稱過濾并修改值。
給你一個更好的例子,我的站點回傳一個帶有新資料的物件,我想用新物件修改資料庫物件,而不清除陣列,名稱鍵永遠不會改變。
const object = [
{ name: 'Joe', value: 'Hey', id: 1 },
{ name: 'Adam', value: 'None', id: 1 }
];
for(const obj in object) {
Schema.findOneAndUpdate({ id: 123 }, {
$set: {
[`infos.${obj}.value`]: "Test"
}
})
}
此代碼有效,但未優化,它發出多個請求,我想在一個請求中完成所有操作,而且它不更新 id,只更新值。
如果有人可以幫助我,那就太好了,我到處尋找,找不到任何東西
我的架構結構
new Schema({
id: { "type": String, "required": true, "unique": true },
infos: []
})
我使用該$addToSet方法將物件插入到infos陣列中
uj5u.com熱心網友回復:
也許你正在尋找這樣的東西:
db.collection.update({},
{
$set: {
"infos.$[x].value": "test1",
"infos.$[x].id": 10,
"infos.$[y].value": "test2",
"infos.$[y].id": 20
}
},
{
arrayFilters: [
{
"x.name": "Adam"
},
{
"y.name": "Joe"
}
],
multi: true
})
解釋:
您為您擁有的物件中的所有名稱定義 arrayFilters 并更新所有檔案中的值和 id ...
操場
uj5u.com熱心網友回復:
嘗試這個 :
db.collection.update({
id: 123,
},
{
$set: {
"infos.$[x].value": "Value",
"infos.$[x].name": "User"
}
},
{
arrayFilters: [
{
"x.id": {
$in: [
1
]
}
},
],
multi: true
})
all 位置
$[]運算子充當陣列欄位中所有元素的占位符。在
$in你可以使用arrayid的動態。前任 :常量 ids = [1,2,..n]
db.collection.update(
//Same code as it is...{ arrayFilters: [ { "x.id": { $in: ids } }, ], multi: true })
MongoPlayGround 鏈接:https ://mongoplayground.net/p/Tuz831lkPqk
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/443987.html
標籤:javascript 节点.js mongodb 猫鼬 mongodb查询
