У меня есть 6 индексированных полей в моей коллекции. Мое приложение использует агрегированные запросы с различными комбинациями из них. Вот несколько возможных примеров:MongoDB понимает составные индексы
1. {$match: {$and: [{field1: {$in: [1,2,3]}}, {$field5: {$gt: 8}}]}}
2. {$match: {$and: [{field2: {$nin: [4,5,6]}}, {$field5: {$lte: 8}}, {$field6: 5}]}}
3. {$match: {field1: {$in: [7,8,9]}}}
Как я уже говорил, все поля индексируются. Конечно, когда я выполняю первый запрос, функция explain() говорит мне, что используется только один индекс. Количество полей в запросе зависит от выбора пользователя.
Должен ли я создавать индексы для каждой комбинации полей (я имею в виду, как {field1: 1, поле2: 1}, {field1: 1, field2: 1, field3: 1} и т.д.), или я могу просто сделать один индекс соединения для всех полей, таких как {field1: 1, field2: 1, field3: 1, field4: 1, field5: 1, field6: 1}?
Я думаю, что первое решение может быть немного странным, потому что существует так много комбинаций для 6 полей.
Благодарим за отзыв. Общая проблема заключается в том, что мое приложение использует все комбинации полей, я имею в виду, что в моих запросах нет комбинаций полей. – vadimb
В этом случае наилучшим вариантом является индексирование каждого поля отдельно, что, конечно же, повлияет на производительность записи. Альтернативно, если эти поля содержат текстовые данные, вы можете использовать текстовый индекс для всех полей. https://docs.mongodb.com/manual/core/index-text/#wildcard-text-indexes – Kiril
Предоставлено другое предложение – Kiril