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ののparamsにコールバック関数を追加しようとしているが、機能はヒットれることは決してありません:
var cursor = Collection.aggregate(query).cursor({batchSize: 1000}).exec(function(error, result){
console.log(error);
console.log(result);
callback();
});
メモリが足りなくなってアプリケーションがクラッシュする可能性があるため、一括して実行します。 5000kコマンドごとに言いましょう。 – Azarus