![](/img/trans.png)
[英]How to update multiple objects in array in a single mongodb document using mongoose
[英]Edit multiple objects in array using mongoose (MongoDB)
所以我尝试了几种方法,但我不能,我可以用相同的键修改几个对象,但我不能用不同的键修改任何对象,如果有人能帮助我,这是一个非常复杂的问题
{
id: 123,
"infos": [
{ name: 'Joe', value: 'Disabled', id: 0 },
{ name: 'Adam', value: 'Enabled', id: 0 }
]
};
在我的数据库中,我有一个集合,其中包含一个数组和几个对象,其中给出了这个。
我想修改这些对象,按名称过滤并修改值。
给你一个更好的例子,我的网站返回给我一个 object 的新数据,我想用新的 object 修改数据库 object,而不清除数组,名称键永远不会改变。
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
数组中
尝试这个:
db.collection.update({
id: 123,
},
{
$set: {
"infos.$[x].value": "Value",
"infos.$[x].name": "User"
}
},
{
arrayFilters: [
{
"x.id": {
$in: [
1
]
}
},
],
multi: true
})
全位置$[]
运算符充当数组字段中所有元素的占位符。
在$in
你可以使用 id 的动态array
。 前任:
const 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
也许您正在寻找这样的东西:
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 ...
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.