MongoDB:基于条件的阵列更新

时间:2019-04-11 17:34:50

标签: mongodb

不确定是否可以这样做,或者不确定过滤后的位置运算符$[<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 }

是否可以在一次更新中完成?

0 个答案:

没有答案