当前位置: 首页 > 知识库问答 >
问题:

用Spring data mongodb实现MongoTempate中聚合查询的执行方案

施弘壮
2023-03-14

我使用spring数据mongodb,在想要聚合查询中实现我使用MongoTemplate和聚合方法。当我跟踪日志时,它显示查询如下:

find: track.$cmd { "aggregate" : "stayRecord" , "pipeline" : [ { "$match" : { "vehicleId" : { "$all" : [ 10]}}} , { "$match" : { "stayTime" : { "$gte" : { "$date" : "2016-06-20T18:30:00.000Z"}}}} , { "$match" : { "stayTime" : { "$lt" : { "$date" : "2016-06-21T18:30:00.000Z"}}}} , { "$group" : { "_id" : "$stayTime" , "count" : { "$sum" : 1}}}}

我想知道这个查询的执行计划。我如何才能发现我的索引是否在查询过程中被使用?

共有1个答案

邴越彬
2023-03-14

请注意,为了遵循下面的步骤,您需要mongo shell能够理解的工作聚合查询。

请遵循以下步骤:-

1)转到mongo Shell2)执行use命令切换到数据

use <database name>

3)执行下面的查询,希望线程中提到的聚合查询在语法上是正确的,另外,请按照下面的语法相应更改集合名称。

db.YourCollectionName.Explain().Aggregate({“StayRecord”,“Pipeline”:[{“$Match”:{“StayTime”:{“$GTE”:{“$Date”:“2016-06-20T18:30:00.000Z”}}}},{“$Match”:{“StayTime”:{“$Date”:“2016-06-21T18:30:00.000Z”}}}},{“$Group”:{“_ID”:“$StayTime”,“Count”:{“$Sum”:1}}}});

2)在输出中,请找到“winningplan”元素。在input stage(“inputstage”)属性中,如果查询使用了索引,它将显示值为“IXScan”,如果查询使用了索引,它将显示索引名称。否则,它将显示“collScan”,这意味着查询使用了集合扫描(即。未使用索引)。

"winningPlan" : {
            "stage" : "LIMIT",
            "limitAmount" : 0,
            "inputStage" : {
                "stage" : "SKIP",
                "skipAmount" : 0,
                "inputStage" : {
                    "stage" : "FETCH",
                    "filter" : {
                        "user.followers_count" : {
                            "$gt" : 1000
                        }
                    },
                    "inputStage" : {
                        "stage" : "IXSCAN",
                        "keyPattern" : {
                            "created_at" : -1
                        },
                        "indexName" : "created_at_-1",
                        "isMultiKey" : false,
                        "direction" : "backward",
                        "indexBounds" : {
                            "created_at" : [
                                "[MinKey, MaxKey]"
                            ]
                        }
                    }
                }
            }
        }
 类似资料:
  • 问题内容: 这是我第一次在Java中使用Mongo,并且此聚合查询存在一些问题。我可以在Mongo for Spring中执行一些简单的查询,并在我的Repository接口中扩展注解。知道在Spring-Data中进行长时间聚合时采用哪种方法会很有帮助。 问题答案: 您可以实现AggregationOperation 并编写自定义聚合操作查询,然后用于执行您在mongo shell中执行的任何m

  • 这是我第一次在Java中使用Mongo,这个聚合查询有一些问题。我可以在我的存储库界面中使用注释在Mongo for Spring中进行一些简单的查询,这扩展了

  • >[danger] 注意!!! 使用聚合功能时,必须给它一个别名,以便能够从模型中访问它 > 聚合函数的计算,都是排除了 null 值,所以COUNT( id ) 一般推荐用非空的主键来计算 COUNT 计算数量 const { Sequelize } = app; // 查询班级总人数,按照姓名聚合 const ret = await Student.findAll({ attribut

  • 在应用中我们经常会用到一些统计数据,例如当前所有(或者满足某些条件)的用户数、所有用户的最大积分、用户的平均成绩等等,ThinkPHP为这些统计操作提供了一系列的内置方法,包括: 方法 说明 count 统计数量,参数是要统计的字段名(可选) max 获取最大值,参数是要统计的字段名(必须) min 获取最小值,参数是要统计的字段名(必须) avg 获取平均值,参数是要统计的字段名(必须) sum

  • 我正在尝试实现一个泛型类(

  • 我是Spring Data MongoDB的新手,我正在尝试用Spring Data MongoDBJava实现聚合查询。我尝试过从这个问题中搜索,并使用进行搜索,但仍然没有结果。 我的数据格式: 我的查询: 这是我在Javascript后端使用的查询,我可以用Mongoose很容易地做到这一点。然而,我对它的Java实现有一些困难。 当我尝试运行此程序时,会出现以下错误: 当我删除从组聚合中,我