我需要根据索引字段查询包含100M文档的mongoDB(4.0版)集合。
例如,如果我有一个用户集合,并且每个用户都有一个城市域,该域是一个字符串,并且对该字段进行了索引,我想问一下有多少用户在城市域(db.users.count({address:"New York"})
中具有某个确切值。
我看到如果有20M,则对结果的响应时间会根据结果数而变化,大约是5秒。
在explain()中,我看到它使用COUNT,并且有索引名称
"stage" : "COUNT_SCAN"
和
"indexName" : "address_1"
我的问题是mongodb是否不保存与每个索引字段键相关的文档数量,以便无需扫描即可快速检索? 有没有一种快速的方法来检索这些信息?
答案 0 :(得分:0)
您可以这样做:
db.users.find({address: 'New York'}).count()
,因为您已经索引了address
键,所以我认为它更快。我认为mongoDB不会在任何地方保存有关基于索引键的集合中有多少项的信息。只需使用索引键检索数据并执行.count()
即可。
答案 1 :(得分:0)
不,不是。 但是,另一种可能的改进:
db.users.ensureIndex({address:1});
db.users.find({{address: 'New York}).count();