Pymon go выдает «OperationFailure: ключ слишком длинный» - PullRequest
0 голосов
/ 09 января 2020

После обновления MongoDB с версии 3.4.17 до 4.0.12 время от времени при выполнении mongo.conn.COLLECTION_NAME.find({'email': ['1'] * 2000}), когда электронная почта является строковым значением, выдается следующая ошибка:

  File "/usr/local/lib/python2.7/dist-packages/pymongo/cursor.py", line 787, in count
    cmd, self.__collation, session=self.__session)
  File "/usr/local/lib/python2.7/dist-packages/pymongo/collection.py", line 1600, in _count
    _cmd, self._read_preference_for(session), session)
  File "/usr/local/lib/python2.7/dist-packages/pymongo/mongo_client.py", line 1465, in _retryable_read
    return func(session, server, sock_info, slave_ok)
  File "/usr/local/lib/python2.7/dist-packages/pymongo/collection.py", line 1594, in _cmd
    session=session)
  File "/usr/local/lib/python2.7/dist-packages/pymongo/collection.py", line 250, in _command
    user_fields=user_fields)
  File "/usr/local/lib/python2.7/dist-packages/pymongo/pool.py", line 613, in command
    user_fields=user_fields)
  File "/usr/local/lib/python2.7/dist-packages/pymongo/network.py", line 167, in command
    parse_write_concern_error=parse_write_concern_error)
  File "/usr/local/lib/python2.7/dist-packages/pymongo/helpers.py", line 159, in _check_command_response
    raise OperationFailure(msg % errmsg, code, response)
OperationFailure: The key is too long

Возвращенное Код ошибки: 17280

Python: 2.7.16
Pymon go: 3.9.0

Выполнение запроса План такой:

{'executionStats': {'allPlansExecution': [],
  'executionStages': {'advanced': 0,
   'alreadyHasObj': 0,
   'docsExamined': 0,
   'executionTimeMillisEstimate': 0,
   'filter': {'email': {'$eq': ['1',...,'1']}},
   'inputStage': {'advanced': 0,
    'direction': 'forward',
    'dupsDropped': 0,
    'dupsTested': 0,
    'executionTimeMillisEstimate': 0,
    'indexBounds': {'email': ['["1", "1"]', '[[ "1", ... , "1" ]]']},
    'indexName': 'email_1',
    'indexVersion': 2,
    'invalidates': 0,
    'isEOF': 1,
    'isMultiKey': False,
    'isPartial': False,
    'isSparse': False,
    'isUnique': False,
    'keyPattern': {'email': 1},
    'keysExamined': 1,
    'multiKeyPaths': {'email': []},
    'nReturned': 0,
    'needTime': 1,
    'needYield': 0,
    'restoreState': 0,
    'saveState': 0,
    'seeks': 2,
    'seenInvalidated': 0,
    'stage': 'IXSCAN',
    'works': 2},
   'invalidates': 0,
   'isEOF': 1,
   'nReturned': 0,
   'needTime': 1,
   'needYield': 0,
   'restoreState': 0,
   'saveState': 0,
   'stage': 'FETCH',
   'works': 2},
  'executionSuccess': True,
  'executionTimeMillis': 0,
  'nReturned': 0,
  'totalDocsExamined': 0,
  'totalKeysExamined': 1},
 'ok': 1.0,
 'queryPlanner': {'indexFilterSet': False,
  'namespace': 'DATABASE_NAME.COLLECTION_NAME',
  'parsedQuery': {'email': {'$eq': ['1', ... , '1']}},
  'plannerVersion': 1,
  'rejectedPlans': [],
  'winningPlan': {'filter': {'email': {'$eq': ['1', ... ,  '1']}},
  'inputStage': {'direction': 'forward',
    'indexBounds': {'email': ['["1", "1"]', '[[ "1", ... ,"1" ]]']},
        'indexName': 'email_1',
    'indexVersion': 2,
    'isMultiKey': False,
    'isPartial': False,
    'isSparse': False,
    'isUnique': False,
    'keyPattern': {'email': 1},
    'multiKeyPaths': {'email': []},
    'stage': 'IXSCAN'},
   'stage': 'FETCH'}},
 'serverInfo': {'gitVersion': '5776e3cbf9e7afe86e6b29e22520ffb6766e95d4',
  'host': '*****',
  'port': 27037,
  'version': '4.0.12'}}

Ошибка, вероятно, вызвана огромным сравнением (длинный список), но я не нашел никакой документации по этому поводу.

Это ограничение было добавлено в версии 4.0?

...