我在猫鼬中使用“ $ in”运算符遇到麻烦。在较高的级别上,我有一个User模式,并且其中一个字段是Card模式的数组。卡模式中有一个“得分”字段。我想根据卡片ID列表更新“得分”字段。这是我要使用的:
User.updateMany(
{
"_id": userId,
"cards._id": {
"$in": cardIds
}
},
{ $inc: {"cards.$.score": 1 }},
(err) => {console.log(err)}
)
运行此代码时,只会更新cardIds
数组中的第一张Card,而不是全部更新。知道为什么这行不通吗?谢谢。
答案 0 :(得分:0)
您需要在.updateMany()中使用arrayFilters,请尝试以下查询:
User.updateMany({
"_id": userId
},
{ $inc: { "cards.$[element].score": 1 } },
{ arrayFilters: [{ "element._id": { "$in": cardIds } }] },
(err) => {}
)