根據MongoDB's manual,在稀疏索引中,只包含包含該字段的對象。我可以看到稀疏索引的大小(以字節爲單位),但我如何查看它包含的對象數量?我正在對我的對象進行升級,並且該數字是剩餘多少處理。如何找出MongoDB稀疏索引中包含多少個對象?
更新:我的索引字段是一個Integer和一個ObjectId。如果它們在索引中的大小是固定的,我可以用字節大小除以它的大小來得到一個近似值嗎?也許磁盤上的稀疏索引大小不會縮小,因爲我刪除了具有該字段的對象...
根據MongoDB's manual,在稀疏索引中,只包含包含該字段的對象。我可以看到稀疏索引的大小(以字節爲單位),但我如何查看它包含的對象數量?我正在對我的對象進行升級,並且該數字是剩餘多少處理。如何找出MongoDB稀疏索引中包含多少個對象?
更新:我的索引字段是一個Integer和一個ObjectId。如果它們在索引中的大小是固定的,我可以用字節大小除以它的大小來得到一個近似值嗎?也許磁盤上的稀疏索引大小不會縮小,因爲我刪除了具有該字段的對象...
如果各個字段已設置,則對象將包括在稀疏索引中,即使它是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份文件被編入索引,可能不是故意的。
嗯我不相信有一種方法來看,a:什麼是在樹和b:得到對象數,我可能是錯的 – Sammaye