Курсор MongoDB

Опубликовано: 30 Ноября, 2021

В MongoDB, когда метод find () используется для поиска документов, присутствующих в данной коллекции, этот метод возвращает указатель, который будет указывать на документы коллекции, теперь этот указатель известен как курсор. Или, другими словами, мы можем сказать, что курсор - это указатель , и с помощью этого указателя мы можем получить доступ к документу. По умолчанию итерация курсора выполняется автоматически, но вы можете выполнять итерацию курсора вручную, о чем мы поговорим позже.

Пример: в этом примере мы работаем с:

Database: gfg

Collection: student

Documents: Three documents contain the details of the students

Здесь мы используем следующий запрос для отображения всех документов, имеющихся в коллекции студентов.

 db.student.find (). довольно ()

Этот метод find () возвращает курсор со всеми документами, присутствующими в коллекции студентов.

Итерация курсора вручную

В MongoDB метод find () возвращает курсор, теперь для доступа к документу нам нужно перебрать курсор. В оболочке mongo, если курсор не назначен ключевому слову var, оболочка mongo автоматически выполняет итерацию курсора до 20 документов. MongoDB также позволяет выполнять итерацию курсора вручную. Итак, чтобы выполнить итерацию курсора вручную, просто назначьте курсор, возвращаемый методом find (), ключевому слову var или переменной JavaScript.

Примечание. Если курсор неактивен в течение 10 минут, сервер MongoDB автоматически закроет этот курсор.

Синтаксис:

var name = db.collection_name.find()

name



Пример :

 var mycursor = db.student.find ({studentId: 3}). pretty ()
мой курсор

Здесь мы вручную перебираем курсор, чтобы найти документ, у которого studentId равен 3. Итак, мы назначили курсор, возвращаемый методом find (), переменной JavaScript (то есть mycursor).

Используя метод next ():

Мы также можем использовать метод курсора next () для доступа к следующему документу. Обсудим на примере:

Пример:

 var mycursor = db.student.find ({studentId: {$ gt: 1}});
> while (mycursor.hasNext ()) {
... печать (tojson (mycursor.next ()));
...}

В этом примере отображаются документы studentId 2 и 3, потому что в первой строке мы исключительно взяли курсор, чтобы начать с studentId> 1. Таким образом, он пропустил 1-й документ и получил остальные документы. Здесь для отображения результата используется метод print (tojson ()). Вы также можете использовать метод printjson () для отображения результата.

Использование метода forEach ():

Мы также можем использовать метод forEach () для итерации курсора. Эта функция применяет функцию JavaScript к каждому документу от курсора.

Синтаксис:

db.collection.find().forEach(<function>)

Пример:

 var mycursor = db.student.find ({studentId: 3}). pretty ()
mycursor.forEach (printjson)

Здесь сначала мы сохраняем курсор, возвращаемый методом find () (т.е. studentId: 3), в переменной mycursor. Теперь мы используем метод forEach () для перебора курсора и отображения полученного документа с помощью printjson.

Индекс итератора:

В оболочке mongo вам разрешено перебирать курсор и отображать результирующий документ в массиве с помощью метода toArray ().

Синтаксис:

cursor.toArray()

Пример:

 вар mycursor = db.student.find (). довольно ()
var docs = mycursor.toArray ()
var resultdoc = docs [0]
resultdoc

Здесь сначала мы назначаем возвращенный курсор ключевому слову var (т.е. mycursor), а затем создаем массив из полученного курсора с помощью метода toArray () и присваиваем результат ключевому слову var (т.е. docs). Теперь мы обращаемся к документам в соответствии с их индексом, например, var resultdoc = docs [0], здесь мы отображаем документ с индексом 0.

Альтернативный метод:

Вы также можете использовать этот метод для доступа к документу с помощью индекса курсора.

 вар mycursor = db.student.find (). довольно ()
var resultdoc = mycursor [0]
resultdoc

Часто используемые методы

Ниже приведены наиболее часто используемые методы курсора:

Счетчик курсора:

Чтобы получить правильные документы, нам нужно знать, сколько документов присутствует в этой коллекции. Чтобы получить это, мы можем использовать метод count (), который возвращает общее количество документов, присутствующих в данной коллекции.

Синтаксис:

db.collection_name.find().count()

or 

db.collection_name.count()

Пример:

 db.student.find (). count ()

Здесь мы находим общее количество документов, присутствующих в коллекции студентов, с помощью метода count ().

Предел курсора:

Метод limit () помогает получить ограниченные записи из коллекции. Предположим, у нас есть несколько документов, но мы хотим иметь самый верхний или только 2 документа, тогда, используя метод limit (), мы можем этого добиться.

Синтаксис:

db.collection_name.find().limit(<number>)

Пример:

 db.student.find (). предел (2) .pretty ()

Здесь мы отображаем только первые два документа из студенческой коллекции.

Размер курсора:

Метод cursor.size () будет полезен для возврата количества документов, полученных в результате запроса db.collection.find () после применения любых методов cursor.skip () и cursor.limit (). По сути, он будет фильтровать по заданному условию и находить размер курсора. Следовательно, он упоминается, поскольку он применил методы cursor.skip () и cursor.limit ().

Синтаксис:

db.collection_name.find().size()

Пример:

 db.student.find ({studentId: 1}). size ()

Сортировка курсора:

Обычно при проверке документов, если вывод отсортирован в порядке возрастания или убывания, это будет проще. Поэтому мы используем метод sort () для сортировки документов. Если вы хотите отсортировать документы по возрастанию, затем установите значение поля равным 1 и по убыванию, затем установите -1.

Синтаксис:

db.collection_name.find().sort(<sort>)

Пример:

 db.student.find (). sort ({studentId: -1}). pretty ()

Здесь мы сортируем все документы, присутствующие в коллекции студентов, в порядке убывания.

Cursor.toArray ():

Чтобы иметь в качестве массива все документы, возвращаемые курсором, мы можем использовать метод toArray ().

Синтаксис:

db.collection_name.find().toArray()

Пример:

 db.student.find (). toArray ()

Cursor.next:

Метод next () используется для возврата следующего документа в курсоре. Обычно он возвращает первый документ, поскольку это будет результат первого документа в курсоре.

Синтаксис:

db.student.find().next()

Пример:

 db.student.find (). следующий ()

Здесь метод next () возвращает первый документ из коллекции.

Курсорный метод

Методы курсора изменяют способ выполнения базового запроса.

Название метода Описание
cursor.addOption () Этот метод используется для добавления специальных флагов протокола связи и изменения поведения запроса.
cursor.allowDiskUse () Этот метод позволяет MongoDB использовать временные файлы на диске для хранения данных, превышающих предел системной памяти в 100 мегабайт, при обработке операции сортировки с блокировкой.
cursor.allowPartialResults () Этот метод позволяет операции find () для коллекции возвращать частичные результаты, а не ошибку, если один или несколько запрошенных сегментов недоступны.
cursor.batchSize () Этот метод используется для управления количеством документов, которые MongoDB вернет клиенту в одном сетевом сообщении.
cursor.close () Этот метод используется для закрытия курсора и освобождения связанных ресурсов сервера.
cursor.isClosed () Этот метод используется для возврата истины, если курсор закрыт.
cursor.collation () Этот метод используется для указания сопоставления для курсора, возвращаемого методом find ().
cursor.comment () Этот метод используется для добавления комментария к запросу, чтобы обеспечить возможность отслеживания в журналах и коллекции system.profile.
курсор.explain () Этот метод используется для составления отчета о плане выполнения запроса для курсора.
cursor.forEach () Эта функция используется для применения функции JavaScript для каждого документа, находящегося в курсоре.
cursor.hasNext () Этот метод возвращает истину, если у курсора больше документов и его можно повторять.
cursor.hint () Этот метод заставляет MongoDB использовать определенный индекс для запроса.
cursor.isExhausted () Когда курсор закрыт и в пакете не осталось объектов, этот метод возвращает значение true.
cursor.itcount () cursor.count () и itcount () похожи только. В itcount () - выполнение существующего итератора, исчерпание его содержимого в процессе.
cursor.map () Выходные данные доступны в виде массива путем применения функции к каждому документу в курсоре.
cursor.max () Этот метод используется для указания эксклюзивной верхней границы индекса для курсора.
cursor.maxTimeMS () Этот метод используется для указания совокупного ограничения времени в совокупном ограничении времени в миллисекундах для операций с курсором.
cursor.min () Этот метод используется для указания нижней границы индекса для курсора.
курсор.next () Этот метод используется для получения следующего документа в курсоре.
cursor.noCursorTimeout () Этот метод указывает серверу избегать автоматического закрытия курсора после периода бездействия.
cursor.objsLeftInBatch () Этот метод используется для определения количества документов, оставшихся в текущем пакете курсора.
курсор.pretty () Этот метод используется для отображения результатов в удобном для чтения виде.
cursor.readConcern () Проблема чтения указывается для операции find ().
cursor.readPref () Этот метод определяет предпочтение чтения для курсора, чтобы управлять тем, как клиент направляет запросы к набору реплик.
cursor.returnKey () Обычно результирующий курсор операции find () предоставляет документы, тогда как returnkey () изменяет курсор и возвращает индексные ключи.
cursor.showRecordId () Этот метод добавляет поле идентификатора внутреннего хранилища, которое возвращается курсором.
cursor.skip () Во время отображения документов нам может потребоваться пропустить несколько документов по разным причинам. В это время skip () помогает отображать результаты после пропуска ряда документов.
cursor.tailable () Метод отмечен как изменяемый курсорами ограниченных коллекций.