我有一个名为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”}}''{规范:[{正文:“SUV”}]}' –