3

私は Spring Data (1.3.0.RC1) を使用して MongoDB にアクセスし、いくつかの新しいクエリには集約フレームワークを使用したいと考えています。

mongo シェルでは、コマンドは次のようになります。

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)

なぜ春は「pd.PDch」ではなく「PDch」を参照したいのだろうか?

4

2 に答える 2

1

問題は、PDchまたはではありませんpd.PDch。何らかの理由で、コードは を使用しAggregation.DEFAULT_CONTEXTてフィールド参照を取得していません。これは、複数のフィールドがある場合に発生します。グループ フィールドが 1 つしかない場合、コードは正しく機能します。

于 2013-09-13T15:09:45.497 に答える
1

DATAMONGO-753によると、これは最新のスナップショットで修正され、次の 1.3.2 バグ修正リリースと Spring Data MongoDB の次の 1.4 M1 でリリースされるはずです。

于 2013-09-30T17:30:19.487 に答える