【问题标题】:Spring Data MongoDB - Aggregation Framework - invalid reference in group OperationSpring Data MongoDB - 聚合框架 - 组操作中的无效引用
【发布时间】:2013-09-06 08:44:48
【问题描述】:

我使用 Spring Data (1.3.0.RC1) 来访问我们的 MongoDB,对于一些新的查询我想使用聚合框架。

在 mongo shell 中,命令是:

db.spotreports.aggregate(
 { "$unwind" : "$pd"} , { "$group" : { "_id" : "$pd.PDch", "base" : {$sum : "$pd.aBL"}, "uplift" : {$sum : "$pd.up"}}})
{
"result" : [
{
"_id" : 5,
"base" : 529133,
"uplift" : 21516
},
...

我使用的Spring代码是:

Aggregation agg = Aggregation.newAggregation(
Aggregation.unwind("pd"),
Aggregation.group("pd.PDch").sum("pd.aBL").as("base").sum("pd.up").as("uplift")
);

AggregationResults<SpotReportResult> result = mongoTemplate.aggregate(agg, resolveCollection(), SpotReportResult.class);

我收到以下错误:

java.lang.IllegalArgumentException: Invalid reference 'PDch'!
at org.springframework.data.mongodb.core.aggregation.ExposedFieldsAggregationOperationContext.getReference(ExposedFieldsAggregationOperationContext.java:63)
at org.springframework.data.mongodb.core.aggregation.ExposedFieldsAggregationOperationContext.getReference(ExposedFieldsAggregationOperationContext.java:47)
at org.springframework.data.mongodb.core.aggregation.GroupOperation.toDBObject(GroupOperation.java:284)
at org.springframework.data.mongodb.core.aggregation.Aggregation.toDbObject(Aggregation.java:228)

我想知道为什么 spring 要引用 'PDch' 而不是 'pd.PDch'?

【问题讨论】:

  • 这看起来像一个错误。您是否有机会提出问题并提供最小的测试用例(即域类和聚合定义)?

标签: mongodb spring-data


【解决方案1】:

根据DATAMONGO-753,这应该在最新的快照中得到修复,并在即将发布的 1.3.2 错误修复版本和即将发布的 Spring Data MongoDB 1.4 M1 中发布。

【讨论】:

  • 在 1.4.1.RELEASE 中损坏
  • Faisal:如果是这样,如果你看到它坏了,你介意为此创建一张票吗?可能附带一个测试用例?
【解决方案2】:

问题不是PDchpd.PDch。由于某种原因,代码没有使用Aggregation.DEFAULT_CONTEXT 来获取字段引用。当有多个字段时,就会发生这种情况。如果您只有一个组字段,则代码可以正常工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-25
    • 2014-05-11
    • 1970-01-01
    • 2021-06-15
    • 1970-01-01
    相关资源
    最近更新 更多