cursor - интсрумент для итерации по результатам запросов к БД

CursorType

class pymongo.cursor.CursorType

Тип курсора

NON_TAILABLE

стандартный курсор

TAILABLE

курсор сохрянющий свою позицию

Такое курсор не закрывается после получения послдених данных и могут вернуть новые данные с последней позиции

TAILABLE_AWAIT

курсор сохраняющий свою позицию

Курсор будет ждать в течении нескольких секунд после возвращения полного набора результата, поэтому он может вернуть доп добавленные данные в течении запроса

EXHAUST

потоковый курсор

БД будет возвращать данные клиенту, не дожидаясь от него результата чтения предыдущих данных

Cursor

class pymongo.cursor.Cursor(**kwargs)

Курсор

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

  • collection -
  • filter=None -
  • projection=None -
  • skip=0 -
  • limit=0 -
  • no_cursor_timeout=False -
  • cursor_type=CursorType.NON_TAILABLE -
  • sort=None -
  • allow_partial_results=False -
  • oplog_replay=False -
  • modifiers=None -
  • manipulate=True -
>>> db.test.find()[50]
>>> db.test.find()[20:50]
address

Адрес БД

alive

Может ли курсор вернуть ещё данные.

Даже если и может, то вызов метода next() может возбудить исключение StopIteration

Актуально для курсоров tailable курсоров

collection

:py:class::pymongo.collection.Collection коллекция курсора

cursor_id

Идентификатор курсора

retrivied

Количесвто пуже полученных документов

add_option(mask)

Установить флаг запроса, используя битовую маску

>>> # tailable флаг
>>> cursor.add_option(2)
batch_size(batch_size)

Установить количесвто документов, возвращаемых курсором за раз.

Note

БД имеет ограниче на размер возвращаемой порции курсору, она будет приоритетнее чем количесвто записей в порции.

Например если установить размер порции в 1,000,000 документов, вернется то количесвто документов, которое уместится в 4-16Мб.

clone()

Возвращает новый курсор, копия текущего курсора

close()

Закрывает/убивает курсор. Требуется только для PyPy, Jython и других питон интерпретаторов не использующих сборщик мусора.

comment(comment)

Добаляет коментарии к курсору

count(with_limit_and_skip=False)

Возвращает размер текущего запроса, количество документов

  • with_limit_and_skip=False - учитывать ограничения

Возбуждает:

  • :py:class::pymongo.errors.OperationFailure
distinct(key)

Возвращает список уникальных данных по ключю

explain()

Возвращает план запроса курсора

hint(index)

Добавляет “подсказку” для БД, какой индекс использовать

>>> cur.hint([('field', ASCENDING)])
>>> cur.hint('index_name')
limit(limit)

Ограничивает количесвто возвращаемых данных курсором

Возбуждает:

  • :py:class::pymongo.errors.InvalidOperation
max(spec)

Добавляет оператор максимума, который определяет максимальную границу индекса

max_scan(max_scan)

Огрничивает количесвто сканируемых документов

Возбуждает:

  • :py:class::pymongo.errors.InvalidOperation
max_time_ms(max_time_ms)

Задает время для выполнения запроса

Возбуждает:

  • :py:class::pymongo.errors.InvalidOperation
min(spec)

Добавляет оператор минимума, который определяет минимуальную границу индекса

next()

Передвигает курсор на след позицию

remove_option(mask)

Удаляет флаги запроса, используя битовую маску

rewind()

Сбросить курсор

skip(skip)

Пропустить первые указанные количесвто документов

Возбуждает:

  • :py:class::pymongo.errors.InvalidOperation
sort(key_or_list, direction=None)

Сортировка результата запроса

Возбуждает:

  • :py:class::pymongo.errors.InvalidOperation
>>> for doc in collection.find().sort('field', pymongo.ASCENDING):
...     print(doc)
>>> for doc in collection.find().sort([
...         ('field1', pymongo.ASCENDING),
...         ('field2', pymongo.DESCENDING)]):
...     print(doc)
>>> cursor = db.test.find(
...     {'$text': {'$search': 'some words'}},
...     {'score': {'$meta': 'textScore'}})
>>> # Sort by 'score' field.
>>> cursor.sort([('score', {'$meta': 'textScore'})])
>>> for doc in cursor:
...     print(doc)
where(code)

Добавляет условие в курсор

  • code - JS функция

Возбуждает:

  • :py:class::pymongo.errors.InvalidOperation