добавление хешированного индекса во вложенное поле приводит к 0 совпадениям в Mongodb - PullRequest
0 голосов
/ 10 июля 2020

У меня есть коллекция с вложенными полями. Вот образец документа из note_concept_tree коллекции

{'_id':  ObjectId('2d8e5189a4834bc4c1d8f02a'),
 'text_key': 123
 'concepts':[{'cui':'abc',...},
             {'cui':'cde', ...}
            ]
}

Когда я ищу в неиндексированной коллекции в Pymon go с помощью db.note_concept_tree.find_one(), я получаю документы. После индексации с помощью:

db.note_concept_tree.create_index([("concepts.cui", "hashed")])

я получаю ноль совпадений с db.note_concept_tree.find_one({"concepts.cui":"abc"}).

После удаления этого индекса с помощью db.note_concept_tree.drop_index('concepts.cui_hashed') я снова получаю совпадения.

Сортированные индексы работают нормально (db.note_concept_tree.create_index([("concepts.cui", "hashed")])), но я предполагаю, что хеширование должно быть быстрее.

Что может go ошибаться и как его отлаживать?

обновление:

Объяснение хешированного запроса:

{'queryPlanner': {'plannerVersion': 1,
  'namespace': 'notedb_test.note_concept_tree',
  'indexFilterSet': False,
  'parsedQuery': {'concepts.cui': {'$eq': 'C0032326'}},
  'queryHash': '3D19D0D4',
  'planCacheKey': 'E1B1AF79',
  'winningPlan': {'stage': 'FETCH',
   'filter': {'concepts.cui': {'$eq': 'C0032326'}},
   'inputStage': {'stage': 'IXSCAN',
    'keyPattern': {'concepts.cui': 'hashed'},
    'indexName': 'concepts.cui_hashed',
    'isMultiKey': False,
    'isUnique': False,
    'isSparse': False,
    'isPartial': False,
    'indexVersion': 2,
    'direction': 'forward',
    'indexBounds': {'concepts.cui': ['[-2609654341490927349, -2609654341490927349]']}}},
  'rejectedPlans': []},
 'executionStats': {'executionSuccess': True,
  'nReturned': 0,
  'executionTimeMillis': 0,
  'totalKeysExamined': 0,
  'totalDocsExamined': 0,
  'executionStages': {'stage': 'FETCH',
   'filter': {'concepts.cui': {'$eq': 'C0032326'}},
   'nReturned': 0,
   'executionTimeMillisEstimate': 0,
   'works': 1,
   'advanced': 0,
   'needTime': 0,
   'needYield': 0,
   'saveState': 0,
   'restoreState': 0,
   'isEOF': 1,
   'docsExamined': 0,
   'alreadyHasObj': 0,
   'inputStage': {'stage': 'IXSCAN',
    'nReturned': 0,
    'executionTimeMillisEstimate': 0,
    'works': 1,
    'advanced': 0,
    'needTime': 0,
    'needYield': 0,
    'saveState': 0,
    'restoreState': 0,
    'isEOF': 1,
    'keyPattern': {'concepts.cui': 'hashed'},
    'indexName': 'concepts.cui_hashed',
    'isMultiKey': False,
    'isUnique': False,
    'isSparse': False,
    'isPartial': False,
    'indexVersion': 2,
    'direction': 'forward',
    'indexBounds': {'concepts.cui': ['[-2609654341490927349, -2609654341490927349]']},
    'keysExamined': 0,
    'seeks': 1,
    'dupsTested': 0,
    'dupsDropped': 0}},
  'allPlansExecution': []},
 'serverInfo': {'host': 'xyz',
  'port': 27017,
  'version': '4.2.0',
  'gitVersion': 'a4b751dcf51dd249c5865812b390cfd1c0129c30'},
 'ok': 1.0}

Объяснение отсортированного запроса:

{'queryPlanner': {'plannerVersion': 1,
  'namespace': 'notedb_test.note_concept_tree',
  'indexFilterSet': False,
  'parsedQuery': {'concepts.cui': {'$eq': 'C0032326'}},
  'queryHash': '3D19D0D4',
  'planCacheKey': 'E1B1AF79',
  'winningPlan': {'stage': 'FETCH',
   'inputStage': {'stage': 'IXSCAN',
    'keyPattern': {'concepts.cui': 1},
    'indexName': 'concepts.cui_1',
    'isMultiKey': True,
    'multiKeyPaths': {'concepts.cui': ['concepts']},
    'isUnique': False,
    'isSparse': False,
    'isPartial': False,
    'indexVersion': 2,
    'direction': 'forward',
    'indexBounds': {'concepts.cui': ['["C0032326", "C0032326"]']}}},
  'rejectedPlans': []},
 'executionStats': {'executionSuccess': True,
  'nReturned': 856,
  'executionTimeMillis': 2,
  'totalKeysExamined': 856,
  'totalDocsExamined': 856,
  'executionStages': {'stage': 'FETCH',
   'nReturned': 856,
   'executionTimeMillisEstimate': 0,
   'works': 857,
   'advanced': 856,
   'needTime': 0,
   'needYield': 0,
   'saveState': 6,
   'restoreState': 6,
   'isEOF': 1,
   'docsExamined': 856,
   'alreadyHasObj': 0,
   'inputStage': {'stage': 'IXSCAN',
    'nReturned': 856,
    'executionTimeMillisEstimate': 0,
    'works': 857,
    'advanced': 856,
    'needTime': 0,
    'needYield': 0,
    'saveState': 6,
    'restoreState': 6,
    'isEOF': 1,
    'keyPattern': {'concepts.cui': 1},
    'indexName': 'concepts.cui_1',
    'isMultiKey': True,
    'multiKeyPaths': {'concepts.cui': ['concepts']},
    'isUnique': False,
    'isSparse': False,
    'isPartial': False,
    'indexVersion': 2,
    'direction': 'forward',
    'indexBounds': {'concepts.cui': ['["C0032326", "C0032326"]']},
    'keysExamined': 856,
    'seeks': 1,
    'dupsTested': 856,
    'dupsDropped': 0}},
  'allPlansExecution': []},
 'serverInfo': {'host': 'xyz',
  'port': 27017,
  'version': '4.2.0',
  'gitVersion': 'a4b751dcf51dd249c5865812b390cfd1c0129c30'},
 'ok': 1.0}
...