Spec-Zone.ru › Mongoose

QueryCursor

QueryCursor()

Параметры:
  • query «Запрос»
  • options «Объект» параметры запроса, передаваемые в .find()
Наследует:
  • «Readable»

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»
См.:
  • AggregationCursor.close

Помечает этот курсор как закрытый. Остановит потоковую передачу, и последующие вызовы 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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API