使用 updateMany 返回猫鼬中更新的模型?

gpb*_*lio 7 mongoose mongodb

这是我的代码:

const result = await Todo.updateMany(
      { _id: { $in: ids }, userId },
      { $set: { complete } },
      { new: true }
    ).populate('userId', '_id');
res.json({ todos: result })
Run Code Online (Sandbox Code Playgroud)

它适用于更新数据,但返回以下内容:

{ 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] } } }
Run Code Online (Sandbox Code Playgroud)

我怎样才能退回更新后的模型?

Har*_*hah 7

我认为不可能更新多个文档并返回所有更新的文档。

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 });
Run Code Online (Sandbox Code Playgroud)