目前,我正在学习mongo并正在阅读索引。我成功地为“eyeColor”创建了一个索引,当我运行这个db.users.find({"eyeColor":{$ne: "brown"}}).explain("executionStats")
时,我收到了以下内容:
"executionStats" : {
"executionSuccess" : true,
"nReturned" : 7,
"executionTimeMillis" : 0,
"totalKeysExamined" : 8,
"totalDocsExamined" : 7,
...
当我运行此db.users.find({"eyeColor":"brown"}).explain("executionStats")
时,我收到了以下内容:
"executionStats" : {
"executionSuccess" : true,
"nReturned" : 1,
"executionTimeMillis" : 0,
"totalKeysExamined" : 1,
"totalDocsExamined" : 1,
...
我的收藏中有8条记录。据我了解,当我创建应该减少检查的文档总数的索引时,当我使用$ne
运行搜索时,它似乎已经扫描了所有文档。我不确定我是怎么理解的。
答案 0 :(得分:1)
正如the docs中所述,$ne
的选择性较低,因此您所看到的是预期的。查询需要检查所有8个eyeColor
密钥,确定有7个密钥的值不是'brown'
,然后读取这7个文档。