在条目中,条目如下所示:
{
"a": {
"b": {
"c": "myValue"
}
},
"f" : 14000000000
}
我们已经创建了一个像这样的复合索引:
{
"a" : 1,
"a.b" : 1,
"a.b.c" : 1,
"f" : 1
}
但是,当我们运行以下查询时:
{
"a": {
"b": {
"c": "myValue"
}
},
"f" : { $gt: 1300000}
}
这不使用任何索引。如何在MongoDB对象上定义索引(注意我们不是试图在a.b.c上有索引,而是在整个对象上有索引)
答案 0 :(得分:1)
我们发现如果您想利用索引,您的查询需要在索引所在的字段中展平:
{
"a.b.c": "myValue",
"f" : { $gt: 1300000}
}
实际上会使用索引。因此,如果您有以下情况:
{
"a": {
"b": {
"c": "myValue",
"d": "myValue2"
}
},
"f" : { $gt: 1300000}
}
你应该像这样重写查询
{
"a.b.c": "myValue",
"a.b.d": "myValue2",
"f" : { $gt: 1300000}
}
答案 1 :(得分:0)
来自 MongoDB documentation about indexes :
[...]索引存储特定字段或集合的值 字段,按字段的值排序。 [...]
所以我认为你不能索引整个对象或嵌入对象。您可以只索引对象的字段。
另外,我认为您在这里尝试的是 Compound Index 。
你试过这个索引吗?
{
"a.b.c" : 1,
"f" : 1
}
最后,如果您使用 Replica Sets 和/或 Sharding ,请注意索引的行为不是同样的:
我希望这会对你有所帮助。