Операция поиска MongoDB генерирует OperationFailure: невозможно обновить значение - PullRequest
1 голос
/ 19 апреля 2020

У меня есть приложение, которое использует MongoDB (на AWS DocumentDB) для хранения документов с большой строкой в ​​одном из его полей, которое мы называем полем X.
Несколько примечаний для начала:

  1. Я использую pymon go, так что названия методов, которые вы можете увидеть здесь, взяты оттуда
  2. Что касается природы поля X, оно не индексируется

Вкл. В поле X мы используем метод поиска MongoDB, используя запрос с условием регулярного выражения, ограничив его как maxTimeMS , так и , ограничивающий небольшим количеством результатов.


Когда мы получаем результаты, мы перебираем курсор для извлечения всех результатов в список (встроенный l oop).

В большинстве случаев запрос работает правильно, но я Я начинаю получать все больше и больше следующей ошибки:

pymongo.errors.OperationFailure: Cannot update value (error code 14)

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

Запрос:

collection.find(condition).max_time_ms(MAX_QUERY_TIME_MS).sort(sort_order) \
            .limit(RESULT_LIMIT)
results = [document for document in cursor] # <--- here we get the error

Трассировка стека:

pymongo/helpers.py in _check_command_response at line 155
pymongo/cursor.py in __send_message at line 982
pymongo/cursor.py in _refresh at line 1104
pymongo/cursor.py in next at line 1189
common/my_code.py in <listcomp> at line xxx

Я пытаюсь понять происхождение исключения, чтобы обработать его правильно или использовать другой подход для обработки курсора. что обновляется в методе refre sh для курсора, который может выдать указанное выше исключение?

Заранее спасибо.

...