首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >$and算子与无算子条件的Mongodb差异

$and算子与无算子条件的Mongodb差异
EN

Stack Overflow用户
提问于 2019-02-18 15:17:22
回答 1查看 381关注 0票数 3

Mongodb的条件在形式上有区别吗?

代码语言:javascript
复制
{$and: [{a: 'aaa'}, {b: 'bbb'}]} 

和不带$and算子的sam条件

代码语言:javascript
复制
{a: 'aaa', b: 'bbb'}

有人告诉我$and操作符减慢了查询速度。是真的吗?谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-02-18 15:53:50

这些条件之间没有区别。回答这样的问题的最好方法是查看explain输出,看看Mongo实际上是如何处理这样的查询的。

如果您查看下面的查询计划中的winningPlan,您会发现它们完全相同!仅仅因为$and{a: 'aaa', b: 'bbb'}中不明确并不意味着它不存在:它只是隐含的。

> db.my_test_coll.createIndex({a: 1, b: 1}); // adding an index

没有$and**:**的

代码语言:javascript
复制
> db.my_test_coll.find({a: 'aaa', b: 'bbb'}).explain()
{
    "queryPlanner" : {
        "plannerVersion" : 1,
        "namespace" : "test.my_test_coll",
        "indexFilterSet" : false,
        "parsedQuery" : {
            "$and" : [
                {
                    "a" : {
                        "$eq" : "aaa"
                    }
                },
                {
                    "b" : {
                        "$eq" : "bbb"
                    }
                }
            ]
        },
        "winningPlan" : {
            "stage" : "FETCH",
            "inputStage" : {
                "stage" : "IXSCAN",
                "keyPattern" : {
                    "a" : 1,
                    "b" : 1
                },
                "indexName" : "a_1_b_1",
                "isMultiKey" : false,
                "multiKeyPaths" : {
                    "a" : [ ],
                    "b" : [ ]
                },
                "isUnique" : false,
                "isSparse" : false,
                "isPartial" : false,
                "indexVersion" : 2,
                "direction" : "forward",
                "indexBounds" : {
                    "a" : [
                        "[\"aaa\", \"aaa\"]"
                    ],
                    "b" : [
                        "[\"bbb\", \"bbb\"]"
                    ]
                }
            }
        },
        "rejectedPlans" : [ ]
    },
    "ok" : 1
}

使用$and**:**的

代码语言:javascript
复制
> db.my_test_coll.find({$and: [{a: 'aaa'}, {b: 'bbb'}]}).explain()
{
    "queryPlanner" : {
        "plannerVersion" : 1,
        "namespace" : "test.my_test_coll",
        "indexFilterSet" : false,
        "parsedQuery" : {
            "$and" : [
                {
                    "a" : {
                        "$eq" : "aaa"
                    }
                },
                {
                    "b" : {
                        "$eq" : "bbb"
                    }
                }
            ]
        },
        "winningPlan" : {
            "stage" : "FETCH",
            "inputStage" : {
                "stage" : "IXSCAN",
                "keyPattern" : {
                    "a" : 1,
                    "b" : 1
                },
                "indexName" : "a_1_b_1",
                "isMultiKey" : false,
                "multiKeyPaths" : {
                    "a" : [ ],
                    "b" : [ ]
                },
                "isUnique" : false,
                "isSparse" : false,
                "isPartial" : false,
                "indexVersion" : 2,
                "direction" : "forward",
                "indexBounds" : {
                    "a" : [
                        "[\"aaa\", \"aaa\"]"
                    ],
                    "b" : [
                        "[\"bbb\", \"bbb\"]"
                    ]
                }
            }
        },
        "rejectedPlans" : [ ]
    },
    "ok" : 1
}
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54750316

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档