mongo运算符更新数组中的所有匹配项

时间:2019-05-12 16:42:14

标签: mongodb mongoose

messages: [
    {
        user: "5c57c85a9354fa24ad749137",
        text: "hello",
        unread: true
    },
    {
        user: "5c57c85a9354fa24ad749137",
        text: "world",
        unread: true
    }
]

我正在尝试使用$ []更新ID与给定ID不匹配但没有任何反应的所有数组元素

ChatSchema.update(
        {_id: mongoose.Types.ObjectId(req.body.conversationId), "messages": {$elemMatch: {"user": {$ne: mongoose.Types.ObjectId(req.body.userId)}}}},
        {$set: {"messages.$[].unread": false}},
        {multi: true}
        ).exec()

当我使用单个$运算符时,它只会更新找到的第一个元素。

我正在使用4.0.6版的mongo和6.7.0版的mongoose

1 个答案:

答案 0 :(得分:1)

匹配条件应为$[identifier]

ChatSchema.update(
  { "_id": mongoose.Types.ObjectId(req.body.conversationId) }},
  { "$set": { "messages.$[msg].unread": false }},
  { "arrayFilters":[{ "msg.user": { "$ne": mongoose.Types.ObjectId(req.body.userId) }}] }
)