更新多个文档并返回所有更新的文档

时间:2017-02-15 10:04:45

标签: node.js mongodb mongoose

我正在寻找一种使用mongoose一次更新许多文档并返回所有修改过的文档的方法。我尝试在update()中设置multi:true。它正在更新所有匹配的文档但不返回任何文档。然后我尝试了findOneAndUpdate()。即使有许多匹配的文档,它也只更新并返回一个文档。是的,函数名称本身告诉,它只会更新一个,我仍然尝试过。我无法在multi:true中设置findOneAndUpdate()之类的选项。怎么做到呢?提前致谢

2 个答案:

答案 0 :(得分:9)

目前,我不认为在MongoDB中可以更新多个文档并在同一查询中返回所有更新的文档。

在Mongoose中,findOneAndUpdate()基于MongoDB的本地findAndModify()方法。

如果您检查findAndModify()方法的官方documentation,则说明 -

  

findAndModify命令修改并返回单个文档。

     

虽然查询可能匹配多个文档,但findAndModify只会选择一个要修改的文档。

因此,您无法使用findAndModify更新多个文档。

另一方面,

update()updateMany()方法使用multi标记更新了许多文档,但它只返回WriteResult,如下所示 -

WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

答案 1 :(得分:0)

首先更新,然后按照 Jyotmans 的回答进行。

const update = await Model.updateMany({
    condition: "value"
}, {
    "$set": {
        field: "value"
    }
}, {
    "multi": true
});
// res.json(icMessages)

const get = await Model.find({
    room: req.params.room
}).exec()
res.json(get)