返回未更新的搜索值列表(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)的主要内容,如果未能解决你的问题,请参考以下文章