Node.js中的Mongoose静音崩溃

我试图向mongodb插入大量的普通对象,但是一些非常奇怪的事情正在发生。 比方说,我尝试插入1000个这样的对象

for (var i = 0; i < 1000; i++) { var commentAux = { 'a': 'test' + i, 'b': 'https://test.com', 'c': appUser.id, 'd': 'test of' + i } comments.push(commentAux); } Comment.collection.insert(comments, function (err, docs) { if (err) { return res.json({success: false, message: 'Comments Fail'}); } } 

但是如果我换1000个可以说1500,服务器挂起。 它永远不会抛出一个优点,既不是一个警告,也不是什么。 它只是在那里。 我一直在阅读,这个数量的文件甚至没有接近mongo支持的限制数量。

有人面对同样的问题? 我在窗口中使用mongo 3.2

正如在评论中提到的那样,批量最大值是1000 …所以我实现了一个自定义BulkManager,以便pipe理我的API中的大量文档。

所以我的BulkManager.js这个。

 module.exports = function () { var instance = {}; var Promise = require("bluebird"); var Q = require("q"); Promise.promisifyAll(instance); instance.insert = function (DbModel, items) { var arrays = [], size = 1000; while (items.length > 0) arrays.push(items.splice(0, size)); return saveItems(DbModel, arrays, arrays.length, 0); }; var deferred = Q.defer(); function saveItems(DbModel, arrays, amountToProcess, indexToProcess) { if (indexToProcess <= (amountToProcess - 1)) { var items = arrays[indexToProcess]; DbModel.collection.insert(items, function (err, docs) { if (err) { return deferred.reject({success: false, error: err}); } if (amountToProcess > 1 && indexToProcess < (amountToProcess - 1)) { indexToProcess++; saveItems(DbModel, arrays, amountToProcess, indexToProcess); } else { return deferred.resolve({success: true, docs: docs}); } }); } return deferred.promise; } return instance; }; 

从我的API,我这样称呼。

 BulkManager.insert(PhotoModel, photos).then(function (response) { if (!response.success) { return res.json({success: false, message: 'Photos Fail'}); } // do stuff on success } 

我插入100000条logging时遇到同样的问题。 最后,我从mongoose切换到mongodb驱动程序,并使用:db.collection('mycollectionaname')。insert(arrayofrecords,{ordered:false});

你也可以看看: https : //docs.mongodb.com/getting-started/node/insert/