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