#mongodb #database-indexes
#mongodb #база данных-индексы
Вопрос:
Моя коллекция, названная Messages
в MongoDB, содержит множество сообщений с содержимым сообщений и метаданными. Каждое сообщение имеет идентификатор Sender
и Recipient
идентификатор в формате UUID
, который, в свою очередь, является a string
. Существуют варианты использования, когда мне нужно запрашивать оба Sender
и Recipient
с одним и тем же UUID
, или только Sender
или только Recipient
с a UUID
, или оба с разными UUID
s .
Я создал текстовый индекс для первого случая, который работает довольно хорошо, но мне нужно эффективно искать и в других случаях. Что бы вы предложили? Что я должен настроить / изменить? Я не могу определить какой-либо другой текстовый индекс в той же коллекции, потому что на данный момент существует ограничение на количество текстовых индексов в MongoDB.
Примечание: сначала я не знал о текстовых индексах и пытался создать обычные индексы, но они просто вообще не используются запросами, и даже если я заставляю их использовать, запросы все равно сканируют все документы, что бесполезно.
Комментарии:
1. Здесь вам вообще не нужен текстовый индекс. Это для полнотекстового поиска. Вам нужен обычный индекс.
2. обычные индексы не используются при запросе в соответствии с анализом выполнения.
3. Это звучит маловероятно. Может быть, настроить игровую площадку mongo , которая демонстрирует такое поведение?
4. Я пытался, но не смог создать индекс странным образом. mongoplayground.net/p/OnjLE72UMmr
Ответ №1:
Согласно игровой площадке, вам нужно использовать это для создания индекса.
Именно по этой причине он не использовал индекс.
db.Message.createIndex({
"Sender._id": 1
})
У вас также может быть другой индекс Recipient._id
. На основе вашего запроса он будет использовать индекс.
Я имею в виду, когда у вас есть два отдельных индекса, т.Е. Один включен Sender_id
, другой включен Recipient._id
, и при запросе будет использоваться соответствующий индекс.
И ваш вариант использования — это не полнотекстовый поиск, поэтому не используйте для этого текстовый индекс.
Комментарии:
1. Извините, но я все еще не могу создать индекс. mongoplayground.net/p/xgVPLSTiSh_
2. Похоже, что существует специальный синтаксис для создания коллекции с индексами в mongoplayground. Смотрите раскрывающийся список «шаблон» в верхней панели. @schlingel
3. Ну ладно, неважно. Похоже, вы не можете создавать свои собственные данные и индексы в mongoplayground.
4. нет, я использовал специальный синтаксис и создал индекс, но в плане выполнения по-прежнему указано, что он использовал «collspan»: mongoplayground.net/p/KGD8CGr1pkc
5. @schlingel: ваш запрос был неправильным. Должно быть так . Я также пытался изменить определение вашего индекса, но mongoplayground по-прежнему, похоже, не создает правильные индексы (возможно, он может создавать только текстовые индексы? : пожатие плечами:). Это сработало на моем локальном хосте (план выполнения показывает IXSCAN)