猫鼬$ in运算符仅更新一个文档

时间:2020-02-27 16:04:38

标签: javascript node.js mongodb mongoose

我在猫鼬中使用“ $ in”运算符遇到麻烦。在较高的级别上,我有一个User模式,并且其中一个字段是Card模式的数组。卡模式中有一个“得分”字段。我想根据卡片ID列表更新“得分”字段。这是我要使用的:

User.updateMany(
  {
    "_id": userId,
    "cards._id": {
      "$in": cardIds
    }
  },
  { $inc: {"cards.$.score": 1 }},
  (err) => {console.log(err)}
)

运行此代码时,只会更新cardIds数组中的第一张Card,而不是全部更新。知道为什么这行不通吗?谢谢。

1 个答案:

答案 0 :(得分:0)

您需要在.updateMany()中使用arrayFilters,请尝试以下查询:

User.updateMany({
    "_id": userId
},
    { $inc: { "cards.$[element].score": 1 } },
    { arrayFilters: [{ "element._id": { "$in": cardIds } }] },
    (err) => {}
)