首页 > 解决方案 > Mongoose $in 运算符仅更新一个文档

问题描述

我在使用 Mongoose 中的“$in”运算符时遇到问题。在高层次上,我有一个用户模式,其中一个字段是卡片模式的数组。在 Card 模式中有一个“score”字段。我想根据卡片 ID 列表更新“分数”字段。这是我正在尝试使用的:

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

当我运行此代码时,仅更新数组中的第一张卡片,cardIds而不是全部更新。知道为什么这不起作用吗?谢谢。

标签: javascriptnode.jsmongodbmongoose

解决方案


您需要在.updateMany()中使用 arrayFilters ,试试这个查询:

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

推荐阅读