【问题标题】:MongoDB Java Aggregation - addToSet Multiple FieldsMongoDB Java 聚合 - addToSet 多个字段
【发布时间】:2017-04-03 11:49:32
【问题描述】:

我正在尝试运行 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 中字符串表达式所需的语法。

谢谢

【问题讨论】:

    标签: java mongodb mongodb-query aggregation-framework


    【解决方案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")
                )
            )
        )
    );
    

    【讨论】:

    • 感谢 chridam - 总是很容易
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-23
    • 1970-01-01
    • 2018-04-05
    相关资源
    最近更新 更多