在 Spring Data TypedAggregation 上指定索引
Specify an Index on a Spring Data TypedAggregation
我正在使用 Spring 数据 Mongo,而我们的一个聚合使用了错误的索引。我正在使用:
- spring-data-mongodb v 1.10.11.RELEASE
- mongo 驱动程序 3.6.4
- JAVA1.8
代码的简化版本如下所示:
Criteria criteria = createMatch("user", "email");
AggregationOperation userCriteria = Aggregation.match(criteria);
TypedAggregation<NucleusOccupancySummary> aggregation = Aggregation.newAggregation(User.class,userCriteria);
AggregationResults<NucleusOccupancySummary> aggregationResults = mongoOperations.aggregate(aggregation, User.class, User.class);
在这种情况下,聚合选择了错误的索引。通过向查询添加排序,我已经能够让它使用正确的索引,但这似乎是一种草率的实现方式。
我想知道是否有人成功使用聚合或游标提示(或任何其他方式)指定应该用于聚合的索引。
更新:从 Spring Data MongoDB 3.1 开始,通过提供 BSON 文档作为 AggregationOptions.Builder[ 上的 hint 支持聚合提示=34=].
不,即使 mongo java 驱动程序 (AggregateIterable
) 支持,也无法将提示传递给 spring 中的聚合查询。
目前AggregationOptions
支持batchSize、cursor、explain、allowDiskUse和collation。
有一个 jira 待处理以向聚合添加提示。你可以在那里跟进。
我正在使用 Spring 数据 Mongo,而我们的一个聚合使用了错误的索引。我正在使用:
- spring-data-mongodb v 1.10.11.RELEASE
- mongo 驱动程序 3.6.4
- JAVA1.8
代码的简化版本如下所示:
Criteria criteria = createMatch("user", "email");
AggregationOperation userCriteria = Aggregation.match(criteria);
TypedAggregation<NucleusOccupancySummary> aggregation = Aggregation.newAggregation(User.class,userCriteria);
AggregationResults<NucleusOccupancySummary> aggregationResults = mongoOperations.aggregate(aggregation, User.class, User.class);
在这种情况下,聚合选择了错误的索引。通过向查询添加排序,我已经能够让它使用正确的索引,但这似乎是一种草率的实现方式。
我想知道是否有人成功使用聚合或游标提示(或任何其他方式)指定应该用于聚合的索引。
更新:从 Spring Data MongoDB 3.1 开始,通过提供 BSON 文档作为 AggregationOptions.Builder[ 上的 hint 支持聚合提示=34=].
不,即使 mongo java 驱动程序 (AggregateIterable
) 支持,也无法将提示传递给 spring 中的聚合查询。
目前AggregationOptions
支持batchSize、cursor、explain、allowDiskUse和collation。
有一个 jira 待处理以向聚合添加提示。你可以在那里跟进。