這是使用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