ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

[MongoDB] aggregate 查询的优化思路

2021-10-08 12:03:26  阅读:221  来源: 互联网

标签:gt group MongoDB 查询 lt vs aggregate diff 1.0


 

程序中打印出查询条件的各部分,有 $match、$group。比如 PHP 中可以通过 var_export()。

由于 aggregate 执行主要是 pipeline 步骤,所以着重需要关注的是 $match 条件。

 

打印出的数组 json_encode 后可以在 Robo3T 等客户端中作为 aggregate 的条件使用。

关于 aggregate 查询条件的格式,可参考:https://studio3t.com/knowledge-base/articles/build-mongodb-aggregation-queries/

为了方便查看 json 条件格式,可以对json在线格式化,之后使用如 Example1.

 

aggregate() 后面直接带不了 explain() 方法,为了使用 explain() 方法查看索引使用情况等信息,复制出 $match 的 json 条件 到 find({ }) 中,然后带上 explain() 方法。

查看 explain() 显示的信息 queryPlanner 部分,里面有 winningPlan.stage 状态分析,如 Example2.

常见的 winningPlan.stage 如下:
  COLLSCAN:全表扫描
  IXSCAN      :索引扫描
  FETCH       :根据索引去检索指定document
  更多的可以搜索 mongodb explain 相关信息。

 

Example1.

db.getCollection('diff_detail').aggregate(
[
    {
    "$match": {
        "diff_id": ObjectId('71162dcf17a1f594edcc69bc'),
        "pvalue": {
            "$lt": 0.05
        },
        "vip": {
            "$gt": 1
        },
        "$or": [{
            "fc": {
                "$gt": 1
            }
        }, {
            "fc": {
                "$lt": 1
            }
        }],
        "diff_group": {
            "$in": ["a1_vs_A1", "a2_vs_A2", "a3_vs_A3", "a4_vs_A4", "a5_vs_A5"]
        }
    }
    },
    {
    "$group": {
        "_id": {
            "table_type": "$table_type",
            "diff_group": "$diff_group"
        },
        "count": {
            "$sum": 1
        }
    }
    }
]

);

 

Example2.

{
    "queryPlanner" : {
        "plannerVersion" : 1,
        "namespace" : "xxxdb.diff_detail",
        "indexFilterSet" : false,
        "parsedQuery" : {
            "$and" : [ 
                {
                    "$or" : [ 
                        {
                            "fc" : {
                                "$lt" : 1.0
                            }
                        }, 
                        {
                            "fc" : {
                                "$gt" : 1.0
                            }
                        }
                    ]
                }, 
                {
                    "diff_id" : {
                        "$eq" : ObjectId("71162dcf17a1f594edcc69bc")
                    }
                }, 
                {
                    "pvalue" : {
                        "$lt" : 0.05
                    }
                }, 
                {
                    "vip" : {
                        "$gt" : 1.0
                    }
                }, 
                {
                    "diff_group" : {
                        "$in" : [ 
                            "a1_vs_A1", 
                            "a2_vs_A2", 
                            "a3_vs_A3", 
                            "a4_vs_A4", 
                            "a5_vs_A5"
                        ]
                    }
                }
            ]
        },
        "queryHash" : "22D09A47",
        "planCacheKey" : "22D09A47",
        "winningPlan" : {
            "stage" : "COLLSCAN",
            "filter" : {
                "$and" : [ 
                    {
                        "$or" : [ 
                            {
                                "fc" : {
                                    "$lt" : 1.0
                                }
                            }, 
                            {
                                "fc" : {
                                    "$gt" : 1.0
                                }
                            }
                        ]
                    }, 
                    {
                        "diff_id" : {
                            "$eq" : ObjectId("71162dcf17a1f594edcc69bc")
                        }
                    }, 
                    {
                        "pvalue" : {
                            "$lt" : 0.05
                        }
                    }, 
                    {
                        "vip" : {
                            "$gt" : 1.0
                        }
                    }, 
                    {
                        "diff_group" : {
                            "$in" : [ 
                                "a1_vs_A1", 
                                "a2_vs_A2", 
                                "a3_vs_A3", 
                                "a4_vs_A4", 
                                "a5_vs_A5"
                            ]
                        }
                    }
                ]
            },
            "direction" : "forward"
        },
        "rejectedPlans" : []
    },
    "serverInfo" : {
        "host" : "mongodb446",
        "port" : 27017,
        "version" : "4.4.1",
        "gitVersion" : "ad91a93a5a31e175f5cbf8c69561e788bbc55ce1"
    },
    "ok" : 1.0
}

 

Link:https://www.cnblogs.com/farwish/p/15379066.html

标签:gt,group,MongoDB,查询,lt,vs,aggregate,diff,1.0
来源: https://www.cnblogs.com/farwish/p/15379066.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有