这是使用mongodb 2.0.4。我们曾想过升级,但只想看看我们是否可以在不这样做的情况下解决这个问题,因为我们的设置升级并不容易。创建日期范围(和其他字段)的覆盖索引
我有很多更新的查询在“查找”部分看起来是这样的:
timestamp:
{
$gte: ISODate('xxxxx'),
$lt: ISODate('xxxxx')
},
id: "string"
processed: false
它基本上是搜索记录的特定日期范围为特定的ID内,并从错误处理,以真正的更新(这是一个“工人”过程)。
我试着创建一个包含所有3个字段(以及_id)的索引,但explain()
仍然返回indexOnly: false
。奇怪的是它也返回此为indexBounds:
"indexBounds" : {
"processed" : [
[
false,
false
]
]
}
有人可以给我一个提示,如何解决这个问题,从而正确的MongoDB使用索引(覆盖索引)或日期范围是根本不可能的?
您尝试创建哪些索引,并将涵盖的查询应用于完整的光标,而不仅仅是查找条件,也就是说,您的返回文档还必须只是索引字段。 – Sammaye 2013-03-18 09:43:27
Sammaye:我知道返回文档的事情,但在这种情况下,它是一个更新,其唯一更新是设置“processed:false”,因此应该被覆盖。试图创建一个包含3个字段(时间戳,ID,处理)以及_id的索引,但它没有显示为覆盖。 – 2013-03-18 13:54:44
没有更新将被覆盖,这是不可能的,一个被覆盖的查询只能存在于一个查找中。如果这就是你的意思,$ set可以在文档中进行原子操作? – Sammaye 2013-03-18 13:57:40