我正在尝试递增符合我的条件
的子文档的所有选定项目我的问题是它只更新第一个匹配的项目。
我按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" }
]
我的意图的任何解决方案?
答案 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 } } ]
});