QueryCursor


QueryCursor()

参数
  • query «Query»
  • options «Object» 传递给 .find() 的查询选项

继承

QueryCursor 是一个用于逐个文档处理查询结果的并发原语。QueryCursor 除了几种其他用于逐个从 MongoDB 加载文档的机制外,还实现了 Node.js streams3 API。

QueryCursors 在从 MongoDB 加载任何文档之前执行模型的预 find 钩子,并在加载每个文档后执行模型的后 find 钩子。

除非您是高级用户,否则不要直接实例化此类。使用 Query#cursor() 而不是。


QueryCursor.prototype.addCursorFlag()

参数
  • flag «String»
  • value «Boolean»
返回值
  • «AggregationCursor» 此对象

添加一个 游标标志。对于设置 noCursorTimeouttailable 标志很有用。


QueryCursor.prototype.close()

返回值
  • «Promise»
参见

将此游标标记为已关闭。将停止流式传输,随后对 next() 的调用将出错。


QueryCursor.prototype.eachAsync()

参数
  • fn «Function»
  • [options] «Object»
    • [options.parallel] «Number» 并行执行的 promise 数量。默认值为 1。

    • [options.batchSize] «Number» 如果设置,将使用长度最多为 batchSize 的文档数组调用 fn()

    • [options.continueOnError=false] «Boolean» 如果为 true,eachAsync() 即使 fn 抛出错误也会遍历所有文档。如果为 false,如果给定的函数 fn() 抛出错误,eachAsync() 会立即抛出错误。

返回值
  • «Promise»

对游标中的每个文档执行 fn。如果 fn 返回一个 promise,将等待 promise 解析,然后才能迭代到下一个 promise。返回一个在完成时解析的 promise。

示例

// Iterate over documents asynchronously
Thing.
  find({ name: /^hello/ }).
  cursor().
  eachAsync(async function (doc, i) {
    doc.foo = doc.bar + i;
    await doc.save();
  })

QueryCursor.prototype.getDriverCursor()

返回此游标使用的 MongoDB 节点驱动程序的底层游标。


QueryCursor.prototype.map()

参数
  • fn «Function»
返回值
  • «QueryCursor»

注册一个转换函数,该函数随后会映射通过流式接口或 .next() 检索的文档

示例

// Map documents returned by `data` events
Thing.
  find({ name: /^hello/ }).
  cursor().
  map(function (doc) {
   doc.foo = "bar";
   return doc;
  })
  on('data', function(doc) { console.log(doc.foo); });

// Or map documents returned by `.next()`
const cursor = Thing.find({ name: /^hello/ }).
  cursor().
  map(function (doc) {
    doc.foo = "bar";
    return doc;
  });
cursor.next(function(error, doc) {
  console.log(doc.foo);
});

QueryCursor.prototype.next()

返回值
  • «Promise»

从此游标获取下一个文档。如果不再有文档,将返回 null


QueryCursor.prototype.options

类型
  • «property»

传递给 QueryCursor 构造函数的 options


QueryCursor.prototype.rewind()

返回值
  • «AggregationCursor» 此对象

将此游标倒回其未初始化状态。游标上存在的任何选项将保持有效。迭代此游标将导致向服务器发送新查询,即使此游标已经检索到了结果数据。


QueryCursor.prototype[Symbol.asyncIterator]()

返回一个与 for/await/of 循环 一起使用的异步迭代器。您无需显式调用此函数,JavaScript 运行时将为您调用它。

示例

// Works without using `cursor()`
for await (const doc of Model.find([{ $sort: { name: 1 } }])) {
  console.log(doc.name);
}

// Can also use `cursor()`
for await (const doc of Model.find([{ $sort: { name: 1 } }]).cursor()) {
  console.log(doc.name);
}

Node.js 10.x 本机支持异步迭代器,无需任何标志。您可以使用 --harmony_async_iteration 标志 在 Node.js 8.x 中启用异步迭代器。

注意:如果 Symbol.asyncIterator 未定义,此函数不可用。如果 Symbol.asyncIterator 未定义,则表示您的 Node.js 版本不支持异步迭代器。