У меня есть приложение, которое использует MongoDB (на AWS DocumentDB) для хранения документов с большой строкой в одном из его полей, которое мы называем полем X.
Несколько примечаний для начала:
- Я использую pymon go, так что названия методов, которые вы можете увидеть здесь, взяты оттуда
- Что касается природы поля 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 для курсора, который может выдать указанное выше исключение?
Заранее спасибо.