2015-06-08 60 views
5

這聽起來有點奇怪,我希望我做錯了什麼,但是我的MongoDB集合正在我的集合中返回一個Count。MongoDB返回的錯誤計數(WiredTiger)

我有一個收集(我確定)359671文件。但是,count()命令返回359670個文檔。

我使用蒙戈外殼執行數()命令:

rs0:PRIMARY> db.COLLECTION.count() 
359670 

這是不正確。

它沒有找到我的收藏中的每一個文件。

如果我提供了下面的查詢來算,我得到正確的結果:

rs0:PRIMARY> db.COLLECTION.count({_id: {$exists: true}}) 
359671 

我相信這是WiredTiger的錯誤。據我所知,每個文檔具有相同的定義,整數範圍從0到359670的_id字段和BinData字段。我沒有舊存儲引擎的問題(或Mongo 2,可能導致了這個問題)。

這是我做錯了什麼嗎?我不想使用{_id:{$ exists:true}}查詢,因爲這需要100倍的時間才能完成。

+1

您使用的是分片羣集嗎?如果是這樣,請參閱http://docs.mongodb.org/manual/reference/method/db.collection.count/#sharded-clusters – JohnnyHK

+0

我沒有使用分片羣集,但感謝您的建議。 – James

回答

9

根據此issue,如果mongodb遇到硬件崩潰並且沒有正常關閉,則會發生此行爲。如果不發出任何查詢,mongodb可能只是回退到收集的統計數據。

根據文章,調用db.COLLECTION.validate(true)應該重置計數器。