MongoDB Java聚合 - addToSet多个字段

时间:2017-04-03 11:49:32

标签: java mongodb mongodb-query aggregation-framework

我尝试运行MongoDB聚合,使用Java驱动程序在单个集合中检索不同的嵌套文档。

如何在Java Accumulators.addToSet文档输出中添加多个字段?

例如在MongoDB Shell中,这可以工作:

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中字符串表达式所需的语法。

由于

1 个答案:

答案 0 :(得分:1)

您可以在 addToSet 运算符中传递文档:

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")
            )
        )
    )
);