Как определить текстовый индекс MongoDB с помощью PyMongo - PullRequest
0 голосов
/ 25 апреля 2018

С PyMongo, MongoDB 3.6 я могу перечислить индексы для collection с list_indexes, как указано в документации здесь .Можно ли узнать, имеет ли данный индекс текстовый тип, посмотрев на его атрибуты?

Полученный текстовый индекс выглядит примерно так:

SON([('v', 2), ('key', SON([('_fts', 'text'), ('_ftsx', 1)])), ('name', 
'full_text_index'), ('default_language','english'),
('language_override', 'language'), ('ns', 'tiquetaque.employees'), 
('weights', SON([('contract_data.department', 1), ('full_name', 1), ('nis', 
1)])), ('textIndexVersion', 3)])

Достаточно ли проверить, textIndexVersion существует?

1 Ответ

0 голосов
/ 26 апреля 2018

Да, индекс можно узнать по атрибутам. Ключ для индекса имеет эту информацию. Вы можете преобразовать данные SON об индексе в словарь и проверить это.

def find_index_by_type(collection, type_):
    indexes = (index.to_dict() for index in collection.list_indexes())
    matches = [index for index in indexes if type_ in index['key'].values()]

    return matches

# text indexes in collection named collection.
print(find_index_by_type(db.collection, 'text'))

# hashed indexes in collection named collection.
print(find_index_by_type(db.collection, 'hashed'))
...