【发布时间】:2018-03-11 06:53:18
【问题描述】:
我正在尝试对 mongoose 聚合查询的结果使用批量删除。
var bulk = Collection.collection.initializeUnorderedBulkOp();
var cursor = Collection.aggregate(query).cursor({batchSize: 1000}).exec();
cursor.each(function(error, doc){
if(doc){
console.log(doc);
bulk.find({_id : doc._id}).removeOne();
}
});
if(bulk.length > 0) {
bulk.execute(function(error){
if(error){
console.error(error);
callback(error);
}else{
console.log(bulk.length + " documents deleted");
callback(null);
}
});
} else {
console.log("no documents to delete");
callback(null);
}
这会导致在每个循环中的聚合结果之前打印“没有要删除的文档”。通常我希望有一个数据库操作的回调函数。我曾尝试在 exec 的参数中添加一个回调函数,但该函数永远不会被命中:
var cursor = Collection.aggregate(query).cursor({batchSize: 1000}).exec(function(error, result){
console.log(error);
console.log(result);
callback();
});
【问题讨论】:
-
批量操作上线?哇!我认为你一定不要那样做。我建议您在服务器上使用每晚的批处理进程,该进程必须放在您的调度程序上。
标签: mongodb mongoose mongodb-query aggregation-framework