node.js - 同时 Mongo 插入是否有限制

标签 node.js mongodb mongoose

我有一个从 CSV 填充的代码集合。总共有1.5M代码,不少。 CSV 很容易解析为对象或表单:

codes = [
  {code:'abc'},
  {code:'123'},
  etc
]

我最初尝试在一次插入中将其写入 Mongo,如下所示

Code.collection.insert(codes) 

(使用 Mongoose 直接组成查询)。

然而这却悄无声息地失败了。假设存在某种隐藏的内存问题,我开始对代码进行分块,发现 Mongo 2.6(在我的 16Gb Macbook 上本地运行,没有副本集)将在一次插入中接受大约 1000 个代码。

这是预期的行为吗?如果是,这个数字有什么理由吗?

最佳答案

尝试使用 Bulk Operation Methods 插入,特别是您需要 db.collection.initializeOrderedBulkOp() 方法,可以使用 Model.collection 访问器对象在 Mongoose 中公开。因此,在上面您可以重组插入以执行批量更新,如下所示:

var bulk = Code.collection.initializeOrderedBulkOp(),
    counter = 0;

codes.forEach( function(obj) ) {
    bulk.find({'code': {'$ne': null}}/* some search */)
        .update({'$set': {'code': obj.code}});
    counter++;
    if (counter % 1000 == 0) {
        bulk.execute(function(err, result) {             
            bulk = Code.collection.initializeOrderedBulkOp();
        });
    }
}

if (counter % 1000 != 0 ) {
    bulk.execute(function(err, result) {
       // get stats
    });
}

关于node.js - 同时 Mongo 插入是否有限制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30663862/

相关文章:

node.js - Azure SQL 与 NodeJS

node.js - 如何使用 docker-compose 通过此 mongoDB 连接字符串将我的 mongo 数据库连接到我的 Node 应用程序?

node.js - 使用 Mongoose 缓解 MongoDB 注入(inject)攻击

node.js - Mongoosejs 创建后保存

node.js - 如何使用 MongoDB/Mongoose 中的先前值更新字段

javascript - MEAN - Mongoose 使用 findById 获取完整对象

node.js - Node : How to send very large data from server to client

node.js - MongoDB:如何按字段分组并获取最新结果?

MongoDB 在同一查询中推送到多个子文档

node.js - 使用 populate 查询两个模式