Повторная индексация базы данных MongoDB

#mongodb #pymongo

#mongodb #pymongo

Вопрос:

В настоящее время я работаю над проектом с MongoDB. У меня 20 миллионов записей, что довольно много. Я запрашиваю эту базу данных с помощью pymongo и выполняю некоторые вычисления. Все строки представляют собой «события» из футбольного матча. Проблема в том, что строки упорядочены не так, как я хочу. Строки структурированы по game ( matchId ), что хорошо, но не по ‘event second’ ( eventSec ) , они не представляют последовательные события. Таким образом, события игры смешиваются вместе. Это раздражает, поскольку я хотел бы иметь возможность переходить к предыдущему и следующему событию, когда я манипулирую данными в Python. Я знаю, что могу запрашивать все элементы, а затем сортировать их в python, но поскольку я использую 20 миллионов записей, это занимает много времени каждый раз, когда я это делаю. Это также не очень упорядоченно в моем интерфейсе MongoDB Compass.

Мой вопрос: могу ли я переиндексировать свою базу данных таким образом, чтобы записи по-прежнему сортировались по matchId и упорядочивались по каждой игре eventSec ?

Ответ №1:

Вы можете создать индекс для MatchID И eventSec:

 db.collection.createIndex( { matchId: 1, eventSec: -1 } );
  

а затем упорядочение запросов по eventSec:

 db.collection.find( { matchId: "yourMatchId" }).sort( { eventSec: -1 } );
  

Комментарии:

1. Привет, спасибо за ваш ответ! Таким образом, тогда будет 2 индекса, и Mongo выберет наиболее подходящий индекс, в зависимости от запроса, я полагаю?

2. Если вы иногда выполняете поиск по идентификатору соответствия, а иногда по идентификатору соответствия И eventSec, в этом случае вам нужен только один: тот, который указан в моем ответе.