У меня есть коллекция под названием variants
с ее specifications
в качестве дополнительного документа. Поиск вариантов с точечной нотацией работает для меня (но не использует индекс), тогда как использование формата вспомогательного документа возвращает нулевые результаты (но использует индекс). Что я сделал не так?MongoDB - Поиск под документа не работает
> db.variants.getIndexes();
[
{
"v" : 1,
"key" : {
"_id" : 1
},
"ns" : "automobile.variants",
"name" : "_id_"
},
{
"v" : 1,
"key" : {
"specifications" : 1
},
"ns" : "automobile.variants",
"name" : "specifications_1"
}
]
> db.variants.find({"specifications" : { "Body" : "SUV" }}).explain()
{
"cursor" : "BtreeCursor specifications_1",
"nscanned" : 0,
"nscannedObjects" : 0,
"n" : 0,
"millis" : 0,
"nYields" : 0,
"nChunkSkips" : 0,
"isMultiKey" : false,
"indexOnly" : false,
"indexBounds" : {
"specifications" : [
[
{
"Body" : "SUV"
},
{
"Body" : "SUV"
}
]
]
}
}
> db.variants.find({"specifications.Body" : "SUV" }).explain()
{
"cursor" : "BasicCursor",
"nscanned" : 787,
"nscannedObjects" : 787,
"n" : 176,
"millis" : 0,
"nYields" : 0,
"nChunkSkips" : 0,
"isMultiKey" : false,
"indexOnly" : false,
"indexBounds" : {
}
}
благодарственного, но я не могу создать индекс 'Specifications.body', потому что в менее 50 спецификаций для каждого варианта. Какое изменение следует сделать так, чтобы запрос для вариантов со списком спецификаций (например, '{Body: 'SUV', Capacity: 4}' будет использовать индекс? –
Тогда вам нужно иметь составной индекс в полях, которые вы запросите запрос. Будьте осторожны, что в составных индексах важно порядок запроса. http://docs.mongodb.org/manual/core/indexes/#index-type-compound – cubbuk
Есть ли какая-либо модификация схемы, которую я могу например, изменить «{Спецификации: {Тело:« SUV »}}' to '{Спецификация: [{Тело:« SUV »}]} –