我們有一個大約1M文件的mongo數據庫,我們想要使用處理字段查詢這個數據庫以查找我們以前沒有看到的文檔。爲此,我們正在設置一個名爲_processed
的新字段。MongoDB查詢具有不存在字段和索引的記錄
要查詢哪些需要處理的文件,我們查詢的文件不具有這個處理場:
db.stocktwits.find({ "_processed" : { "$exists" : false } })
然而,這個查詢需要30秒左右,每次來完成,這是相當緩慢。有一個位於_processed字段的索引(asc):
db.stocktwits.ensureIndex({ "_processed" : -1 },{ "name" : "idx_processed" });
添加此索引不會改變查詢性能。還有一些其他索引坐在集合上(即ID idx &是每個文檔中幾個字段的唯一索引)。
_processed字段很長,也許這應該更改爲布爾使事情更快?
我們使用$哪裏查詢(即$where : this._processed==null
)做同樣的事情$exists : false
嘗試和性能是差不多的(幾秒鐘慢這是有道理的)...
任何想法上會是什麼會導致性能下降(或者正常)?有沒有人有關於如何提高查詢速度的建議?
乾杯!
只是在創建文檔時不是選項而只是將_processed字段設置爲'false'? –
感謝您的評論。這是可行的(但是作爲最後的手段) - 我想避免這種傾銷過程被刺激。 _processed字段在這個實例中很長,所以我們只需將它設置爲類似於0或-1的值。這是一個很好的觀點,但是,將處理後的字段類型更改爲bool會使事情變得更快嗎?處理時間很長的唯一原因是存儲處理時間的時間戳(僅用於幫助進行任何調試),但實際上它可以設置爲bool,如果我們確實需要它,我們可以使用_processed(bool)和_porcessed_timestamp (長)..? – NightWolf