2017-01-09 19 views
1

私は(ソートではありません、私は春のJavaプロジェクトに使用したいが、私は、正しいJavaコードを記述するために管理することはできません。このMongoDBのクエリ

db.getCollection('myCollection').aggregate(
    [{ 
     $project: { 
      length: { 
       $strLenCP: "$prefix" 
      } 
     } 
    }, { 
     $sort: { 
      length: -1 
     } 
    }] 
) 

を持っています問題)。

私はこの

Aggregation agg = newAggregation(project().andExpression("strLenCP(prefix)").as("prefixLength")); 
AggregationResults <RequestSettingsWithPrefixLength> results = mongoTemplate.aggregate(agg, RequestSettings.class, RequestSettingsWithPrefixLength.class); 
List <RequestSettingsWithPrefixLength> requestSettingsList = results.getMappedResults(); 

を試してみましたが、私はAGGのJSON(デバッグモード)でヌルキーを取得しています:

{ 
    "aggregate": "__collection__", 
    "pipeline": [{ 
     { 
      "$project": { 
       "prefixLength": { 
        "null": ["$prefix"] 
       } 
      } 
     }] 
    } 
} 

私は私のAGGオブジェクトがこの投影操作を持っていることがわかります。

expression -> strLenCP(prefix) 
field -> AggregationField: AggregationField - name: prefixLength, target: prefixLength, synthetic: true 
params -> [] 

これは正しいとは確信していませんが、strLenCPを使用するドキュメントは見つかりません。 strLenCP投影を使用したこのテストのみが見つかりました: https://github.com/spring-projects/spring-data-mongodb/blob/dc57b66adfd60b4d69d1d349b4fcfa4ab0da95e7/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/aggregation/SpelExpressionTransformerUnitTests.java#L922

誰かが助けてくれますか?

乾杯

+0

フォーマットのための@Sagar Reddy – marcesso

+0

Npに感謝します。 spring-mongo-dbのどのバージョンですか? – Veeram

+0

mongo-java-driverのバージョンは3.4.0で、org.springframework.dataは1.9.5です。リリース – marcesso

答えて

2

はMongo3.4集約オペレータのサポートが1.10.0.RC1で添加しました。あなたが候補バージョンをリリースするために更新することで大丈夫ならば、すべてうまくいくはずです。

または次の方法を試すことができますが、1.8.5バージョンを使用する必要があります。

Aggregation aggregation = newAggregation(
    project().and(new AggregationExpression() { 
     @Override 
     public DBObject toDbObject(AggregationOperationContext aggregationOperationContext) { 
      return new BasicDBObject("$strLenCP", "$prefix"); 
     } 
    }).as("prefixLength") 
); 
+0

1.10.0 RC1は集計演算子をAPIとして追加し、いくつかの集計式を[SpEL support](https:// github。 com/spring-projects/spring-data-examples/pull/243 /コミット/ 8b407165d9f1999a146daf7bf0088c768c075415#diff-a646e0988d082bfbb13a36e8760b1b74R233)を使用してください。 – mp911de

+0

多くの感謝@Sagar Reddy、DBObjectソリューションは完全に動作します。私が書いているコードは生産中にすぐに必要になるので私はRCを使うことはできませんが、 – marcesso

関連する問題