Javascript 猫鼬聚集光标承诺

Javascript 猫鼬聚集光标承诺,javascript,node.js,mongoose,Javascript,Node.js,Mongoose,我正在尝试聚合一个大型数据集,因此我将光标与聚合一起使用。然而,我找不到关于如何在不使用额外延迟的情况下实现这一点的文档。我觉得必须有一种方法将aggregate().cursor().each()与聚合完成后解决的承诺结合起来。有人知道怎么做吗 这段代码是基于 我正试图找到一种方法来做到这一点,而不需要额外的承诺 aggregation=MyModel.aggregate().group({ _id:“$name” }); 延迟=Q.延迟(); 聚合游标({ 批量大小:1000 }).exe

我正在尝试聚合一个大型数据集,因此我将光标与聚合一起使用。然而,我找不到关于如何在不使用额外延迟的情况下实现这一点的文档。我觉得必须有一种方法将
aggregate().cursor().each()
与聚合完成后解决的承诺结合起来。有人知道怎么做吗

这段代码是基于 我正试图找到一种方法来做到这一点,而不需要额外的承诺

aggregation=MyModel.aggregate().group({
_id:“$name”
});
延迟=Q.延迟();
聚合游标({
批量大小:1000
}).exec().each(函数(err,doc){
如果(错误){
延迟返回。拒绝(错误);
}
如果(!doc){
返回deferred.resolve();//完成
}
//和医生做点什么
});

回报。承诺我发现了这一点,所以我正在寻找有关使用聚合游标和承诺的一般帮助。经过大量的尝试和错误,如果有人发现了这个问题,我发现cursor对象有一个next()方法,与其他游标一样,它返回一个承诺。但是,由于某种原因,如果没有
async
标志,我无法获得对它的引用。因此,如果您使用的是蓝鸟:

let bluebird = require("bluebird");
let aggregation = MyModel.aggregate().group({
  _id: '$name'
});

aggregation.cursor({
  batchSize: 1000,
  async: true
}).exec().then(cursor => {
  return bluebird.coroutine(function* () {
    let doc;
    while ((doc = yield cursor.next())) {
      console.log(doc._id)
    }
  })()
}).then(() => { console.log("done with cursor"); })
猫鼬5更新
exec()
调用不再返回承诺,只返回光标本身,并且不再需要
async:true
属性

let aggregation = MyModel.aggregate().group({
  _id: '$name'
});

(async function () {
  let doc, cursor;
  cursor = aggregation.cursor({batchSize: 1000}).exec();

  while ((doc = await cursor.next())) {
    console.log(doc._id)
  }
})()
.then(() => console.log("done with cursor"); )

我可能误读了,但我认为在第一个代码示例的while块中有一个额外的打开参数
)`while((doc=yield cursor.next()){console.log(doc.\u id)}“谢谢……这实际上是一个缺失的结束语。如果你想对每个文档进行异步更新,这不会有帮助,或者我遗漏了什么?