node.js - Mongoose 中的批量更新
问题描述
例如,我有一组文件:
{ "_id" : ObjectId("5b7c1527c07abb08fc28febe"), "code" : "0001", "time" : ISODate("2014-07-04T09:15:00Z"), "open" : 0, "close" : 0, "high" : 0, "low" : 0, "volume" : 0, "bVolume" : 0, "sVolume" : 0 }
{ "_id" : ObjectId("5b7c1527c07abb08fc28febf"), "code" : "0001", "time" : ISODate("2014-07-04T09:16:00Z"), "open" : 0, "close" : 0, "high" : 0, "low" : 0, "volume" : 0, "bVolume" : 0, "sVolume" : 0 }
{ "_id" : ObjectId("5b7c1527c07abb08fc28fec0"), "code" : "0001", "time" : ISODate("2014-07-04T09:17:00Z"), "open" : 0, "close" : 0, "high" : 0, "low" : 0, "volume" : 0, "bVolume" : 0, "sVolume" : 0 }
{ "_id" : ObjectId("5b7c1527c07abb08fc28fec1"), "code" : "0001", "time" : ISODate("2014-07-04T09:18:00Z"), "open" : 0, "close" : 0, "high" : 0, "low" : 0, "volume" : 0, "bVolume" : 0, "sVolume" : 0 }
{ "_id" : ObjectId("5b7c1527c07abb08fc28fec2"), "code" : "0001", "time" : ISODate("2014-07-04T09:19:00Z"), "open" : 0, "close" : 0, "high" : 0, "low" : 0, "volume" : 0, "bVolume" : 0, "sVolume" : 0 }
我想检索和操作它们,然后在 mongodb 中更新它们。使用 mongoose 中的 save() 函数将它们一一保存,运行速度非常慢。有没有可能一次保存所有的阵列?请注意,每个查询都会返回近 300,000 个文档。建议一种在nodejs中循环遍历它们而不会遇到堆栈溢出的方法(真正的堆栈溢出不是网站:P)会很方便。提前致谢。
解决方案
要在更新文档之前执行一些操作,可以使用MongoDB 中提供的批量操作。有两种类型的批量操作:
在 Mongoose 中,将 替换为db
namemodel
并确保与 的连接db
正常。在执行批量操作之前,如果您根据获取的值进行操作,请通过update
或使用 a设置文档中的值。callback
var bulkOperation = Model.collection.initializeUnorderedBulkOp();
bulkOperation.find({<query>}).update({<update>});
bulkOperation.find({<query2>}).update({<update2>});
...and so on.
bulkOperation.execute(function(err) {
});
推荐阅读
- android - 是否可以将移动应用程序写入micro sd卡?
- list - Draftsight LISP,使用 (cons) 函数构建 x 坐标列表的问题
- python - 如何让机器人提及某人?
- javascript - 通过电子邮件仅以 pdf 格式发送一张工作表或活动工作表
- pandas - 数据框的自定义排序值
- c++ - 共享库中的 Clang C++20 模块
- python - DISCORD PY 删除作者信息的命令未执行
- javascript - 如何在Javascript中带上©符号?
- javascript - 如何在 P5 中使移动精灵指向鼠标?
- color-picker - ImU32 上的 ImGui 颜色选择器