Есть вопрос об индексе для встраивания document
Например, у меня есть индекс
db.mycoll.ensureIndex({ "embedded": 1 })
и документы, подобные этому
{
"_id" : ObjectId("5c75284a5e4c7756e0efb97b"),
"embedded" : {
"4" : NumberInt("4"),
"key1" : NumberInt("1"),
"key2" : NumberInt("2"),
"key3" : {
"key4" : NumberInt("3")
}
}
}
Я знаю, что если я выполню запрос с совпадением полей db.mycoll.find({ "embedded.key1": NumberInt("1")})
, тогда мой индекс не будет использован (collscan в объяснении).Он будет использоваться только при точном совпадении с внедренным документом
db.mycoll.find({
"embedded": {
"4": NumberInt("4"),
"key1": NumberInt("1"),
"key2": NumberInt("2"),
"key3": {
"key4": NumberInt("3")
}
}
})
Другой пример: я могу позвонить
db.mycoll.find().sort({"embedded": 1})
И он использует индекс (из-за объяснять )
Так как это работает?В индексах MongoDB используется структура данных B-дерева, но как ее использовать в случае встроенных документов?