2

根据MongoDB 的手册,在稀疏索引中,仅包含包含该字段的对象。我可以看到稀疏索引的大小(以字节为单位),但是如何查找它包含的对象数量?我正在对我的对象进行升级,这个数字是还有多少需要处理。

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

4

1 回答 1

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 个文档被索引,可能不是故意的。

于 2013-01-10T10:06:11.173 回答