这是使用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正确使用索引(覆盖索引),还是日期范围根本不可能?
答案 0 :(得分:0)
重要的不仅仅是拥有一个包含所有三个字段的索引,而是字段所在的 order 。
我建议使用此article来获取有关如何使用复合索引的更多详细信息。
要记住的主要事项是,测试相等性的字段需要在测试范围的字段之前(特别是因为您使用的旧版本没有稍后进行的某些优化)的版本)。