返回未更新的搜索值列表(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的一个例子