我有以下一段代碼,我遍歷一個集合並執行另一個db查詢並在其回調中構造一個對象。最後,我將該對象保存到另一個集合中。nodejs和mongoskin,在保存所有項目後回調
我希望在保存所有項目後調用另一個函數,但不知道如何。我嘗試使用異步庫,特別是異步,而當項不是null,但只是引發我在一個無限循環。
有沒有一種方法來識別所有物品何時被保存?
謝謝!
var cursor = db.collection('user_apps').find({}, {timeout:false});
cursor.each(function (err, item) {
if (err) {
throw err;
}
if (item) {
var appList = item.appList;
var uuid= item.uuid;
db.collection('app_categories').find({schema_name:{$in: appList}}).toArray(function (err, result) {
if (err) throw err;
var catCount = _.countBy(result, function (obj) {
return obj.category;
})
catObj['_id'] = uuid;
catObj['total_app_num'] = result.length;
catObj['app_breakdown'] = catCount;
db.collection('audiences').insert(catObj, function (err) {
if (err) console.log(err);
});
});
}
else {
// do something here after all items have been saved
}
});
這正是我一直在尋找的,謝謝。我不知道mongodb有一個流選項。如果可以,我會使用聚合,但不幸的是,我無法修改數據的存儲方式。 – Alistair
只是一個簡短的說明,沒有什麼嚴重的,我認爲'最後'事件將在最後一個項目被保存之前被調用。 – Alistair
@Alistair Nope。這就是爲什麼繼續在插入收到回調之後發生的原因。所以只要你總是在任何異步呼叫響應中恢復,那麼他們就完成了。 –