Покрытый запрос MongoDB для двух полей без составного индекса

Можете ли вы выполнить покрытый запрос MongoDB для двух полей, например

db.collection.find( { _id: 1, a: 2 } )

без составного индекса, такого как

db.collection.ensureIndex( { _id: 1, a: 1 } )

но вместо этого иметь только один индекс для _id (вы получаете его по умолчанию) и другой индекс для поля «a», как в

db.collection.ensureIndex( { a: 1 } )

Другими словами, я хотел бы знать, нужен ли для выполнения покрываемого запроса для двух полей составной индекс или требуется только два отдельных (т.е. не составных) индекса, по одному для каждого поля.


person Community    schedule 12.01.2013    source источник


Ответы (1)


Запросы используют только один индекс.

Ваш пример показывает _id как один из элементов вашего индекса? _id Должен быть уникальным в коллекции, поэтому не имеет смысла создавать составной индекс из _id и чего-то еще.

Если бы вместо этого у вас было:

db.collection.ensureIndex( { a: 1, b: 1 })

Затем вы можете использовать индекс a по мере необходимости, независимо или как составной индекс с b.

person WiredPrairie    schedule 12.01.2013
comment
Это помогает, спасибо. Комментарий: запросы используют только один индекс. Где это сказано? - person ; 12.01.2013
comment
@GSchv docs.mongodb.org/manual /applications/indexes/ проверьте последнюю строку этого раздела: За исключением запросов, использующих оператор $or, запрос не может использовать несколько индексов. Запрос должен использовать только один индекс. есть и другие места, но это было первое место, где я посмотрел - person Sammaye; 12.01.2013