QueryCursor
QueryCursor()
Параметры:
-
query«Запрос» -
options«Объект» параметры запроса, передаваемые в.find()
Наследует:
QueryCursor — это примитив для обработки результатов запроса по одному документу за раз. QueryCursor реализует API потоков Node.js, а также несколько других механизмов для загрузки документов из MongoDB по одному за раз.
QueryCursor выполняет предопределённые find хуки модели перед загрузкой любых документов из MongoDB, а пост find хуки модели после загрузки каждого документа.
Если вы не являетесь продвинутым пользователем, не создавайте этот класс напрямую. Используйте Query#cursor() вместо этого.
QueryCursor.prototype.addCursorFlag()
Параметры:
-
flag«Строка» -
value«Булево»
Возвращает:
- «AggregationCursor» this
Добавляет флаг курсора. Полезно для установки флагов noCursorTimeout и tailable.
QueryCursor.prototype.close()
Возвращает:
- «Promise»
См.:
Помечает этот курсор как закрытый. Остановит потоковую передачу, и последующие вызовы next() приведут к ошибке.
QueryCursor.prototype.eachAsync()
Параметры:
-
fn«Функция» -
[options]«Объект» -
[options.parallel]«Число» количество обещаний для выполнения в параллели. По умолчанию 1. -
[options.batchSize]«Число» если задано, вызоветfn()с массивами документов длиной не болееbatchSize -
[options.continueOnError=false]«Булево» если true,eachAsync()проходит через все документы, даже еслиfnвызывает ошибку. Если false,eachAsync()вызывает ошибку немедленно, если данная функцияfn()вызывает ошибку. -
[callback]«Функция» выполняется, когда все документы обработаны
Возвращает:
- «Promise»
Выполните fn для каждого документа в курсоре. Если fn возвращает обещание, подождет, пока обещание не разрешится, прежде чем перейти к следующему. Возвращает обещание, которое разрешается при завершении.
Пример:
// Iterate over documents asynchronously
Thing.
find({ name: /^hello/ }).
cursor().
eachAsync(async function (doc, i) {
doc.foo = doc.bar + i;
await doc.save();
})
QueryCursor.prototype.map()
Параметры:
-
fn«Функция»
Возвращает:
- «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
Тип:
- «свойство»
options переданный в конструктор QueryCursor.
QueryCursor.prototype.rewind()
Возвращает:
- «AggregationCursor» this
Перемотайте этот курсор в его первоначальное состояние. Любые присутствующие параметры курсора останутся в силе. Итерация по этому курсору вызовет новые запросы к серверу, даже если полученные данные уже были извлечены этим курсором.
QueryCursor.prototype[Symbol.asyncIterator]()
Возвращает 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 поддерживает async iterators напрямую без каких-либо флагов. Вы можете включить async iterators в Node.js 8.x, используя --harmony_async_iteration флаг.
Примечание: Эта функция не работает, если Symbol.asyncIterator не определено. Если Symbol.asyncIterator не определено, это означает, что ваша версия Node.js не поддерживает async iterators.
© 2010 LearnBoost
Licensed under the MIT License.
https://mongoosejs.com/docs/api/querycursor.html