问题描述
这是我的代码:
const result = await Todo.updateMany(
{ _id: { $in: ids }, userId },
{ $set: { complete } },
{ new: true }
).populate('userId', '_id');
res.json({ todos: result })
它用于更新数据,但它返回:
it works on updating data but it returns this:
{ 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] } } }
如何退回更新后的模型?
how can i return the updated models?
推荐答案
我认为更新多个文档并返回所有更新的文档是不可能的.
I don't think it is possible to update multiple documents and return all updated documents.
update()
或 updateMany()
方法更新多个文档并仅返回 WriteResult
update()
or updateMany()
method updates multiple documents and returns only the WriteResult
如果使用 {new: true}
的 MongoDB 方法的 findAndModify()
更新单个文档,您可以更新文档作为响应.
You can have updated document in response if the single document gets updated using findAndModify()
of MongoDB method using {new: true}
.
来自文档.
findAndModify:findAndModify 命令修改并返回单个文档.默认情况下,返回的文档不包括对更新所做的修改.返回文件对更新所做的修改,使用新选项.
你可以做的是:
再次获取那些更新的文档.
Fetch again those documents which are updated.
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 });
这篇关于使用updateMany 在猫鼬中返回更新的模型?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!