2017-05-24 15 views
0

springframeworkを使ってJavaでそのクエリを書くのに問題があります。MongoDBアグリゲーションSpring/Java(配列、グループ、マッチのプロジェクト)

db.getCollection('fish').aggregate(
     {$match : {"uploadDate" : { $gte : new ISODate("2017-05-22T00:00:00Z"), $lte : new ISODate("2017-05-25T00:00:00Z") }}}, 
     {$group: {_id: {lake : "$lake", type : "$type"}, count: {$sum: 1}}} , 
     {$project: {array : ["$_id.type" , "$count"], count : "$count"}}, 
     {$group: {_id: {lake : "$_id.lake"}, count: {$sum: 1}, types : {$addToSet : "$array"}}}) 

私はマッチとグループを書くことができましたが、id.typeとcountの両方を含む配列を持つプロジェクトを追加するのに問題があります。これまでのところ、私はそれを書いて、私はあなたがproject()にフィールド/文字列を追加できることを確認するにはどのように任意の解決策を見つけることができませんでした。この

Aggregation aggregation = newAggregation(match(Criteria.where("uploadDate").gte(created).lte(newCreatedDate)), 
     group("lake").count().as("values")); 

を書くことができました。

答えて

1

本当にあなたが望むように式を作成する方法がないので、私はあなたに代替案を提供します。

AggregationOperationを使用し、BasicDBObjectを使用してprojectステージを作成する必要があります。

おかげでたくさん

AggregationOperation project = aggregationOperationContext -> new BasicDBObject("$project", new BasicDBObject("array", Arrays.asList("$_id.type" , "$count")).append("count", "$count")); 
+0

ような何か。あなたの解決策では、私は2つのアトラクション – ojciecmatki

関連する問題