目前,我使用save来添加单个文档。假设我有一个文档数组,我希望将其存储为单个对象。有没有一种方法可以通过一个函数调用将它们全部添加到一起,然后在完成时获得一个回调?我可以单独添加所有文档,但管理回调以确定何时完成所有操作将是有问题的。
发布于 2012-04-22 17:38:17
Mongoose还没有实现批量插入(参见issue #723)。
由于您知道要保存的文档数,因此可以编写如下代码:
var total = docArray.length
, result = []
;
function saveAll(){
var doc = docArray.pop();
doc.save(function(err, saved){
if (err) throw err;//handle error
result.push(saved[0]);
if (--total) saveAll();
else // all saved here
})
}
saveAll();
当然,这是一个权宜之计,我推荐使用某种流量控制库(我使用的是q,它非常棒)。
发布于 2013-06-01 05:45:02
除非您需要访问中间件,否则可以使用.insert()在Mongoose中进行批量插入。
Model.collection.insert(docs, options, callback)
https://github.com/christkv/node-mongodb-native/blob/master/lib/mongodb/collection.js#L71-91
发布于 2013-04-18 03:02:36
使用async parallel,您的代码将如下所示:
async.parallel([obj1.save, obj2.save, obj3.save], callback);
由于Mongoose中的约定与async (err,callback)中的约定相同,因此您不需要将它们包装在您自己的回调中,只需将您的save调用添加到一个数组中,当所有操作完成时,您将获得一个回调。
如果您使用mapLimit,您可以控制要并行保存的文档数量。在本例中,我们并行保存10个文档,直到所有项目都成功保存。
async.mapLimit(myArray, 10, function(document, next){
document.save(next);
}, done);
https://stackoverflow.com/questions/10266512
复制相似问题