我有一个这样的架构:
const NoteClusterSchema = new Schema({
noteInfo: [{
title: String,
Description: String,
authors:[{
name: String, Id: String
}]
}],
idGroup: String //this is the group of the people that are working on the proyect
}, {timestamps:true});
一个noteInfo
的例子是
noteInfo: [{
title: "Hello",
Description: "Hello World",
authors:[
{name: "Marcelo", id: "1234123123"},
{name: "Pancho", id: "12341345344"}
]
}]
例如,如何在authors数组中专门更新“ Marcelo”的名称? (假设是用户更改了它的名称。我知道在这种情况下,我可以只输入_id,但在我的实际模式中,它不是用户要更新的东西)
我想到了这样的东西:
await NoteClusterSchema.updateMany({idGroup: req.body.idGroup},
{
noteInfo: {$push: {authors: {name:
req.body.name}}}
})
但是以这种方式,它不会知道所有noteInfo数组中的哪个会更新,或者它将创建一个新的authors
数组,并且更改noteInfo: {$push:
$push: {noteInfo:
只会创建一个新的noteInfo
数组。
那么,我该如何使用UpdateMany方法更新另一个数组中某个数组中的特定对象?
答案 0 :(得分:1)
findOneAndUpdate应该可以解决您的问题:
NoteClusterSchema.findOneAndUpdate(
{idGroup: req.body.idGroup},
{$set: {"noteInfo.$[element].value": "YOUR_NEW_NAME" } },
{
arrayFilters: [{ "element.name": "Marcelo" }],
new: true
}
)
注意:您必须添加arrayFilters选项才能定位数组中的特定元素。
https://docs.mongodb.com/manual/reference/operator/update/positional-filtered/