2013-01-10 64 views
2

根據MongoDB's manual,在稀疏索引中,只包含包含該字段的對象。我可以看到稀疏索引的大小(以字節爲單位),但我如何查看它包含的對象數量?我正在對我的對象進行升級,並且該數字是剩餘多少處理。如何找出MongoDB稀疏索引中包含多少個對象?

更新:我的索引字段是一個Integer和一個ObjectId。如果它們在索引中的大小是固定的,我可以用字節大小除以它的大小來得到一個近似值嗎?也許磁盤上的稀疏索引大小不會縮小,因爲我刪除了具有該字段的對象...

+0

嗯我不相信有一種方法來看,a:什麼是在樹和b:得到對象數,我可能是錯的 – Sammaye

回答

1

如果各個字段已設置,則對象將包括在稀疏索引中,即使它是null。因此,你可以使用$exists獲得具有價值集合中元素的個數:

> db.Foo.count(); 
185 
> db.Foo.find({"SparseField" : {$exists : true} }).count(); 
174 

因此,只有11的文件是不是在稀疏索引。另外,您也可以使用hint強制使用稀疏索引的查詢和使用explain檢索一些統計數據:

> db.Foo.find().hint("sparse_index_name").explain(); 
{ 
    "cursor" : "BtreeCursor sparse_index_name", 
    "n" : 174, 
} 

CAVEAT使用explain()的行爲從不使用說明查詢不同查詢。具體來說,db.Foo.find().hint("sparse_index_name").count()將返回185,而不是174


這是有道理的檢查時間從稀疏索引正確使用時間:

> db.Foo.find({"SparseField" : null }).count(); 
38 

哎呀。這38份文件被編入索引,可能不是故意的。

相關問題