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

时间:2018-11-30 09:11:40

标签: mongodb mongoose

这是我的代码:

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] } } }

如何退回更新的模型?

2 个答案:

答案 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()

Mongodb findAndModify

此外,您可以使用save(),它将更新文档(如果存在),否则将创建新文档。但是save()一次只允许一个记录。因此,您需要使用循环来更新多个记录。

Mongode save()

相关问题