了解MongoDB上的索引

时间:2017-12-13 15:47:19

标签: mongodb

在条目中,条目如下所示:

{
    "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上有索引,而是在整个对象上有索引)

2 个答案:

答案 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 ,请注意索引的行为不是同样的:

我希望这会对你有所帮助。