2017-04-03 16 views
1

私はMongoDB集約を実行して、Javaドライバを使用して単一のコレクション内の個別のネストされたドキュメントを取得しようとしています。MongoDB Java集計 - addToSet複数のフィールド

Java Accumulators.addToSetドキュメント出力に複数のフィールドを追加するにはどうすればよいですか? MongoDBのシェルで例えば

この作品:

db.systems.aggregate([{$unwind:"$planets"},{$group:{_id:"$surfaceType", distinct:{$addToSet:{radius:"$planets.radius", surfaceType:"$planets.surfaceType"}}}}]) 

出力: planets:[{ "radius" : 10.0,"surfaceType" : "water"},{"radius":"100.0","surfaceType" : "rock"}, ...]

をしかし、Javaでは、これは動作しません。

collection.aggregate(Arrays.asList(Aggregates.group("$surfaceType",Accumulators.addToSet("planets", {radius:"$planets.radius", surface:"$planets.surfaceType", ...})))); 

ただ、かなりのために必要な構文を理解しませんaddToSetの文字列式

おかげ

あなたは addToSetオペレータに文書を渡すことができ

答えて

1

collection.aggregate(
    Arrays.asList(
     Aggregates.unwind("$planets", new UnwindOptions().preserveNullAndEmptyArrays(true)), 
     Aggregates.group("$surfaceType", 
      Accumulators.addToSet("planets", 
       new Document("radius", "$planets.radius") 
        .append("surfaceType", "$planets.surfaceType") 
      ) 
     ) 
    ) 
); 
+1

おかげでchridam - 必ずしも容易では何か – Dusted