我在 MongoDB 中有一个用户集合。我已将“状态”键定义为索引,如下所示:
db.users.createIndex("status": 1)
Run Code Online (Sandbox Code Playgroud)
我正在尝试查找状态设置为“活动”的所有用户。
我的数据库共有 24 个用户。其中 17 个处于活跃状态。
执行下一个命令时:
db.users.find("status": "Active").explain("executionStats")
Run Code Online (Sandbox Code Playgroud)
我收到下一个:
"executionStats" : {
"executionSuccess" : true,
"nReturned" : 17,
"executionTimeMillis" : 2,
"totalKeysExamined" : 17,
"totalDocsExamined" : 17,
...
Run Code Online (Sandbox Code Playgroud)
TotalDocsExamined很清楚 - Mongo 总共扫描了 17 个文档并跳过其余 7个文档(请记住,我们总共收集了 24 个用户)。这太棒了,而且非常高效——因为我要求查找并拥有每个文档的数据。
但是当我执行相同的查询时,但现在使用该.count()方法 - 我不希望 Mongo 扫描 17 条记录,我希望他扫描 0 条记录并立即给我结果总数 - 而无需迭代整个数据库 -因为当有数十亿条记录时,此任务可能会关闭整个服务器。
所以我正在这样做:
db.users.explain("executionStats").find("status": "Active").count()
Run Code Online (Sandbox Code Playgroud)
我收到这个:
"executionStats" : {
"executionSuccess" : true,
"nReturned" : 0,
"executionTimeMillis" : 0,
"totalKeysExamined" : 18,
"totalDocsExamined" : …Run Code Online (Sandbox Code Playgroud)