我仍然是MongoDB/非关系模型数据存储的新手(来自于BI/DWH,关系数据库的经验),所以我正在努力理解如何编写MongoDB。请温柔点。:)
MongoDB版本: 3.6.0
问题是:
var bulk = db.collection_name.initializeOrderedBulkOp();
var counter = 0;
db.collection_name.find().forEach(function(data) { var updoc = { "$set": {} };
var myKey = "snapshot_date";
updoc["$set"][myKey] = new Date(data.snapshot_date);
bulk.find({ "_id": data._id }).update(updoc);
counter++;
if (counter % 1000 == 0) { bulk.execute(); bulk = db.collection_name.initializeOrderedBulkOp(); }});我在上个星期一(两天前)开始了这个查询,它仍然在运行。我已经检查了它是否仍然在运行,并且我看到引擎正在运行,cloudwatch显示了CPU利用率、空闲内存和正在更新的文档的活动。
我的问题是:这个查询能提高效率吗?
我正在尝试更新每一个文档,而不过滤哪些文档应该更新,哪些不应该更新,我知道这一点很多。
然而,即使在关系数据库中,我也认为这不会花费这么长时间。
我应该尝试一种不同的技术来更新这个集合,还是使用指定的dtype创建一个新的集合?
发布于 2021-04-05 12:49:16
如前所述,您正在执行775 As的单独更新操作。虽然在1000大批量中执行此操作比一次执行一次要好,但它仍然需要很长的时间才能完成。更多的性能将是大量更新文档范围,比如50000,并发布多个更新。MongoDB: how to update n records based on ObjectID中有足够的代码可以帮助您更新这种技术的代码。
https://stackoverflow.com/questions/66892986
复制相似问题