不确定是否可以这样做,或者不确定过滤后的位置运算符$[<identifier>]
是执行此操作的正确方法。我愿意接受其他解决方案。
我可以使用一个更新命令从文档更新数组中的多个项目吗?
我正在使用MongoDB 4.0
从官方文档提供的示例开始:https://docs.mongodb.com/manual/reference/operator/update/positional-filtered/
更新匹配多个条件的所有数组元素
{
"_id" : 1,
"grades" : [
{ "grade" : 80, "mean" : 75, "std" : 6 },
{ "grade" : 85, "mean" : 100, "std" : 4 },
{ "grade" : 85, "mean" : 100, "std" : 6 }
]
}
{
"_id" : 2,
"grades" : [
{ "grade" : 90, "mean" : 100, "std" : 6 },
{ "grade" : 87, "mean" : 100, "std" : 3 },
{ "grade" : 85, "mean" : 100, "std" : 4 }
]
}
现在,这将更新与arrayFilters
条件相对应的所有项目的std-1
db.students2.update(
{ },
{ $inc: { "grades.$[elem].std" : -1 } },
{ arrayFilters: [ { "elem.grade": { $eq: 80 }, "elem.grade": { $eq: 85 } } ], multi: true }
)
我正在寻找一种方法,如果std-1
更新"elem.grade": { $eq: 80 }
,如果std+1
更新elem.grade": { $eq: 85 }
是否可以在一次更新中完成?