gpt4 book ai didi

mongodb - 如何获取当前文档的指针以在 updateMany 中更新

转载 作者:IT老高 更新时间:2023-10-28 13:28:05 28 4
gpt4 key购买 nike

我有一个最新的 mongodb 3.2,并且有许多具有时间戳的项目的集合。

需要将毫秒转换为 Date 对象,现在我使用这个函数:

db.myColl.find().forEach(function (doc) {
doc.date = new Date(doc.date);
db.myColl.save(doc);
})

更新 200 万行需要很长时间。

我尝试使用 updateMany(似乎非常快),但我如何才能访问当前文档?有没有机会使用 updateMany 重写上面的查询?

谢谢。

最佳答案

您可以利用其他批量更新 API,例如 bulkWrite() 方法,它允许您使用迭代器访问文档、操作它、将修改后的文档添加到列表中,然后将更新操作的列表批量发送到服务器执行。

下面演示了这种方法,其中您将使用光标的 forEach() 方法迭代集合并同时修改每个文档,将更新操作推送到大约 1000 个文档的批处理,然后可以使用 bulkWrite() 方法。

这与使用 updateMany() 一样有效 因为它使用相同的底层批量写入操作:

var cursor = db.myColl.find({"date": { "$exists": true, "$type": 1 }}),
bulkUpdateOps = [];

cursor.forEach(function(doc){
var newDate = new Date(doc.date);
bulkUpdateOps.push({
"updateOne": {
"filter": { "_id": doc._id },
"update": { "$set": { "date": newDate } }
}
});

if (bulkUpdateOps.length == 1000) {
db.myColl.bulkWrite(bulkUpdateOps);
bulkUpdateOps = [];
}
});

if (bulkUpdateOps.length > 0) { db.myColl.bulkWrite(bulkUpdateOps); }

关于mongodb - 如何获取当前文档的指针以在 updateMany 中更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37455129/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com