0

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

我有很多更新查询,其中“查找”部分如下所示:

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 正确使用索引(覆盖索引),还是日期范围根本不可能?

4

1 回答 1

0

重要的不仅仅是拥有一个包含所有三个字段的索引,而是这些字段的顺序

我推荐这篇文章以获取有关如何使用复合索引的更多详细信息。

要记住的主要事情是,您测试相等性的字段需要在您测试范围的字段之前(特别是因为您使用的是旧版本,并且没有在更高版本中进行一些优化)。

于 2013-03-18T16:40:45.490 回答