返回未更新的搜索值列表(Mongoose、updateMany)

Posted

技术标签:

【中文标题】返回未更新的搜索值列表(Mongoose、updateMany)【英文标题】:Returning list of search values that were not updated (Mongoose, updateMany) 【发布时间】:2021-03-17 22:30:18 【问题描述】:

使用 Mongoose 的 updateMany 函数,我可以提供一个搜索列表来查找用户并进行相应更新。

const searchList = ["userA", "userB", "UNKNOWNUSER"];
const updatedRecords = await User.updateMany(username: $in: searchList, foo: "bar");

使用nmodified 可以轻松找到结果的数量。但是如果有一个用户找不到,显然在这种情况下它不会被更新。除了一些丑陋的BulkWrite 或同步循环函数之外,不完全确定如何找到在一轮 Mongoose 行程中无法找到或更新的 searchList 中的元素。

【问题讨论】:

【参考方案1】:

我知道这个答案与您询问的批量插入无关,但它可能会有所帮助。如果您想将数据插入现有数据,您可以在此处使用 for 循环:

const searchList = ["userA", "userB", "UNKNOWNUSER"];
for(user of searchList)
   const updated = await User.findOneAndUpdate(username: user, $set:foo: "bar", new : true);
   if(updated)
     // that means it would be found
   


【讨论】:

假设我批量选择 100 个用户或 1000 个用户。这会显着影响返回时间或性能,因为它会不断请求那么多次? @trafalgarson ofc 这效率不高。但是当我们说批量插入数据库时​​,我认为您不能拥有这样的控件。

以上是关于返回未更新的搜索值列表(Mongoose、updateMany)的主要内容,如果未能解决你的问题,请参考以下文章

在 Mongoose (mongodb node.js) 中,如何更新现有值并插入缺失值,而不删除未指定的值?

使用 jquery 访问设置为 attr 的 Mongoose 模式键(布尔值),但它返回未定义

下拉列表值的更改不会将更新的值返回给控制器

powershell 这将遍历站点下的所有子站点,然后查找列表并更新列表中的链接字段。这是upda的一个例子

Mongoose findOne() 和 find() 返回无效值,它们应该分别返回 null / 空列表

从 mongoose 数据库获取值时未定义