mongodb只更新子文档的第一个匹配项,尽管它应该选择更多

时间:2018-04-20 08:52:45

标签: mongodb subdocument

我正在尝试递增符合我的条件

的子文档的所有选定项目

我的问题是它只更新第一个匹配的项目。

我按ID选择我的项目(保存为精彩模型)。从子文档“highlight”中选择所有项目,其索引大于给定索引(变量,按请求传递)。

在我的高亮数组中我有:

[
    { index: 1, name: "first" },
    { index: 2, name: "second" },
    { index: 3, name: "three" },
    { index: 4, name: "four" }
]

Highlights.update(
  { _id: project, highlights: { $elemMatch: { index: { $gt: index } } } }, 
  { $inc: { "highlights.$.index": -1 } }
)

当我通过索引2时,我希望得到以下结果:

[
    { index: 1, name: "first" },
    { index: 2, name: "second" },
    { index: 2, name: "three" }, 
    { index: 3, name: "four" }
]

但我得到了这个结果:

[
    { index: 1, name: "first" },
    { index: 2, name: "second" },
    { index: 2, name: "three" }, 
    { index: 4, name: "four" }
]

我的意图的任何解决方案?

1 个答案:

答案 0 :(得分:0)

您可以使用位置过滤器$[<identifier>]arrayFilter选项来更新所有值:

Highlights.update({
    _id: project,
    highlights: { $elemMatch: { index: { $gt: index } } }
}, {
    $inc: { "highligths.$[elem].index": -1 }
}, {
    multi: true,
    arrayFilters: [ { "elem.index": { $gt: index } } ]
});