这是我的代码:
const result = await Todo.updateMany(
{ _id: { $in: ids }, userId },
{ $set: { complete } },
{ new: true }
).populate('userId', '_id');
res.json({ todos: result })
它可以更新数据,但是会返回以下内容:
{ n: 1,
nModified: 1,
opTime:
{ ts:
Timestamp { _bsontype: 'Timestamp', low_: 1, high_: 1543568180 },
t: 1 },
electionId: 7fffffff0000000000000001,
ok: 1,
operationTime:
Timestamp { _bsontype: 'Timestamp', low_: 1, high_: 1543568180 },
'$clusterTime':
{ clusterTime:
Timestamp { _bsontype: 'Timestamp', low_: 1, high_: 1543568180 },
signature: { hash: [Binary], keyId: [Long] } } }
如何退回更新的模型?
答案 0 :(得分:0)
我认为无法更新多个文档并返回所有更新的文档。
update()
或updateMany()
方法更新多个文档并仅返回WriteResult
如果使用findAndModify()
使用MongoDB方法的{new: true}
更新了单个文档,则可以对文档进行更新。
来自文档。
findAndModify :findAndModify命令修改并返回一个 文献。默认情况下,返回的文档不包含 对更新进行的修改。要返回带有 对更新进行的修改,请使用新选项。
您可以做的是:
再次获取那些已更新的文档。
const result = await Todo.updateMany(
{ _id: { $in: ids }, userId },
{ $set: { complete } },
{ new: true }
).populate('userId', '_id');
// here you can update and then get all documents again
const updatedResult = await Todo.find(
{ _id: { $in: ids }, userId }
).populate('userId', '_id');
res.json({ todos: updatedResult });
答案 1 :(得分:0)
更新查询仅返回更新信息,例如记录数,更新的记录数,操作时间,状态等。
如果要返回记录,则需要使用
findAndModify()
此外,您可以使用save(),它将更新文档(如果存在),否则将创建新文档。但是save()一次只允许一个记录。因此,您需要使用循环来更新多个记录。