如何找出MongoDB稀疏索引中包含多少个对象?

时间:2013-01-10 09:04:27

标签: mongodb indexing

根据MongoDB's manual,在稀疏索引中,仅包括包含该字段的对象。我可以看到稀疏索引的大小(以字节为单位),但是如何查看它包含多少个对象?我正在对我的对象进行升级,这个数字是剩余的待处理数量。

更新:我的索引字段是Integer和ObjectId。如果它们在索引中具有固定大小,我可以将其大小(以字节为单位)除以每个索引大小以获得近似值吗?也许稀疏索引大小不会在磁盘上缩小,因为我删除了具有该字段的对象...

1 个答案:

答案 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份文件都是索引的,可能不是故意的。