根据MongoDB's manual,在稀疏索引中,仅包括包含该字段的对象。我可以看到稀疏索引的大小(以字节为单位),但是如何查看它包含多少个对象?我正在对我的对象进行升级,这个数字是剩余的待处理数量。
更新:我的索引字段是Integer和ObjectId。如果它们在索引中具有固定大小,我可以将其大小(以字节为单位)除以每个索引大小以获得近似值吗?也许稀疏索引大小不会在磁盘上缩小,因为我删除了具有该字段的对象...
答案 0 :(得分: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,
}
使用explain()
的 CAVEAT 查询与不使用explain的查询的行为不同。具体来说,db.Foo.find().hint("sparse_index_name").count()
将返回185,而不是174。
有时候检查稀疏索引的正确用法是有意义的:
> db.Foo.find({"SparseField" : null }).count();
38
糟糕。这38份文件都是索引的,可能不是故意的。