为日期范围(和其他字段)创建覆盖索引

时间:2013-03-18 09:39:20

标签: mongodb indexing

这是使用mongodb 2.0.4。我们已经考虑过升级,但只是想看看我们是否可以在不这样做的情况下解决这个问题,因为我们的设置升级并不容易。

我有很多更新查询,其中'find'部分如下所示:

timestamp:
{
    $gte: ISODate('xxxxx'),
    $lt: ISODate('xxxxx')
},
id: "string"
processed: false

它基本上搜索特定ID的特定日期范围内的记录,并将更新从false处理为true(这是“工作”进程)。

我尝试创建一个包含所有3个字段(以及_id)的索引,但explain()仍然返回indexOnly: false。奇怪的是,它也为indexBounds返回了这个:

"indexBounds" : {
    "processed" : [
        [
            false,
            false
        ]
    ]
}

有人能给我一个提示,告诉我如何解决这个问题,以便mongodb正确使用索引(覆盖索引),还是日期范围根本不可能?

1 个答案:

答案 0 :(得分:0)

重要的不仅仅是拥有一个包含所有三个字段的索引,而是字段所在的 order

我建议使用此article来获取有关如何使用复合索引的更多详细信息。

要记住的主要事项是,测试相等性的字段需要在测试范围的字段之前(特别是因为您使用的旧版本没有稍后进行的某些优化)的版本)。