我尝试运行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中字符串表达式所需的语法。
由于
答案 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")
)
)
)
);