MongoDB查询涉及索引的一些字段和一些不是的字段

时间:2017-08-30 07:23:42

标签: mongodb mongodb-query

我在MongoDB中使用索引。我有一个查询:

db.collection.find({field1:"val1",field2:"val2",field3:"val3"})

其中' field1'和' field2'是复合索引的一部分 但是' field3'不属于任何索引 。 我的问题是,将对整个集合执行集合扫描,以匹配' field3'或者' field1'中是否存在索引和' field2'限制要扫描的文档数量为' field3'?

的值

提前感谢您的时间。

1 个答案:

答案 0 :(得分:1)

是的,将使用索引

我通过创建包含文档的集合来测试它:

{ "a" : 1, "b" : 1, "c" : 1 }
{ "a" : 2, "b" : 2, "c" : 2 }
{ "a" : 3, "b" : 3, "c" : 3 }

添加索引:

db.indexTest.createIndex({"a":1,"b":1})

查询字段" c"单独返回一个解释:

"winningPlan" : {
            "stage" : "COLLSCAN",
            "filter" : {
                "c" : {
                    "$eq" : 3
                }
            },
            "direction" : "forward"
        },

查询" a"," b"和" c"使用索引返回解释:

"winningPlan" : {
            "stage" : "FETCH",
            "filter" : {
                "c" : {
                    "$eq" : 3
                }
            },
            "inputStage" : {
                "stage" : "IXSCAN",
                "keyPattern" : {
                    "a" : 1,
                    "b" : 1
                },
                "indexName" : "a_1_b_1",
                "isMultiKey" : false,
                "multiKeyPaths" : {
                    "a" : [ ],
                    "b" : [ ]
                },