使用 mongoskin,我可以做这样的查询,它会返回一个游标:
myCollection.find({}, function(err, resultCursor) {
resultCursor.each(function(err, result) {
}
}
但是,我想为每个文档调用一些异步函数,并在回调后才移动到光标上的下一项(类似于 async.js 模块中的 eachSeries 结构)。例如:
myCollection.find({}, function(err, resultCursor) {
resultCursor.each(function(err, result) {
externalAsyncFunction(result, function(err) {
//externalAsyncFunction completed - now want to move to next doc
});
}
}
我该怎么做?
谢谢
更新:
我不想使用 toArray()
,因为这是一个大批量操作,结果可能一次无法放入内存。
最佳答案
使用 async
/await
的更现代的方法:
const cursor = db.collection("foo").find({});
while(await cursor.hasNext()) {
const doc = await cursor.next();
// process doc here
}
注意事项:
async
或者代码应该被包裹在 (async function() { ... })()
因为它使用 await
.await new Promise(resolve => setTimeout(resolve, 1000));
(暂停 1 秒)以表明它确实处理文档一个接一个。https://stackoverflow.com/questions/18119387/
相关文章:
mongodb - 如何更新 Mongoose 中的多个文档?
node.js - Mongoose:CastError:在路径 "[object Object]"
mongodb - 有人用过 Aerospike 吗?它与 MongoDB 相比如何?
python - pymongo.errors.CursorNotFound : cursor id
mongodb - 在 MongoDB 中查找具有不包含具有特定字段值的文档的数组的文档
mongodb - 如何将 MongoDB 中的属性从文本类型转换为日期类型?