QueryCursor
QueryCursor()
QueryCursor.prototype.addCursorFlag()
QueryCursor.prototype.close()
QueryCursor.prototype.eachAsync()
QueryCursor.prototype.getDriverCursor()
QueryCursor.prototype.map()
QueryCursor.prototype.next()
QueryCursor.prototype.options
QueryCursor.prototype.rewind()
QueryCursor.prototype[Symbol.asyncIterator]()
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» 此对象
添加一个 游标标志。对于设置 noCursorTimeout
和 tailable
标志很有用。
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 版本不支持异步迭代器。