2017-01-11 6 views
0

Рассмотрим наборПоддерживает ли композитный первичный ключ префикс в mongodb?

{ "_id" : { "a" : 1, "b" : 1 }, "c" : 1 } 
{ "_id" : { "a" : 2, "b" : 3 }, "c" : 4 } 
{ "_id" : { "a" : 3, "b" : 4 }, "c" : 5 } 
{ "_id" : { "a" : 4, "b" : 5 }, "c" : 6 } 
{ "_id" : { "a" : 5, "b" : 6 }, "c" : 7 } 
{ "_id" : { "a" : 1, "b" : 5 }, "c" : 6 } 
{ "_id" : { "a" : 1, "b" : -5 }, "c" : 6 } 

в такой коллекции, когда вы выдаете запрос как

db.second.find({ "_id.a" : 1}).explain("executionStats") 

Результаты показывают, что он делает полную коллекцию сканирования. Есть ли причина, почему он не использует какой-либо индекс? Кажется, что составной _id не имеет составного индекса? Есть ли причина, почему нет?

ответ

3

Поведение не относится к составному первичному ключу, но относится к индексу для встроенных документов.

Mongo DB проводит различие между запросами встроенных полей с использованием точечной нотации и документа.

Уникальный индекс создается для встроенного документа в целом для составного первичного ключа. Запрос встроенных полей в документе с точечной нотацией не будет использовать индекс.

db.second.find({ "_id.a" : 1}) -- Doesn't use index 

db.second.find({ "_id":{"a" : 1}) -- Uses index 

db.second.find({ "_id":{$eq:{"a" : 1}}}) -- Uses index 

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

db.second.find({ "_id.a" : 1}) -- Uses index 

db.second.find({ "_id":{"a" : 1}) -- Doesn't use index 

Дополнительная информация here & here

+0

'db.second.find ({ "_id": { "а": 1})' можно сказать, он использует индекс, но он не находит префикс соответствует материал , в этом случае он не возвращает никаких результатов. Мой вопрос концептуально, что префиксный запрос должен работать над составным ключом, но это не так ... почему именно я искал –

Смежные вопросы