本文介绍了使用updateMany 在猫鼬中返回更新的模型?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

这是我的代码:

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 在猫鼬中返回更新的模型?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

08-01 08:23