如何在Morphia查询中包括多个带有累加器的分组?

时间:2018-06-22 15:33:57

标签: java mongodb mongodb-query aggregation-framework morphia

我正在尝试查询数据库中的集合,并按其日期字段对其进行汇总。为此,我编写了此查询,该查询将字段累积到数组中并按日期将它们分组-

db.myclass.aggregate([ { $group : { _id : {$dayOfYear : "$df"}, ts: { $push: {t:"$c"} } } } ])

此查询翻译为Morphia时效果很好-

datastore.createAggregation(MyClass.class)
                .match(query)
                .group(  Group.id(Group.grouping("$dayOfYear", "df"))
                      ,Group.grouping("ts", Accumulator.accumulator("$push","c"))
                      ,Group.grouping("date", Group.first("df"))
                      )
                .project(   projection("ts")
                        ,projection("date")
                        ,projection("day", projection("$dayOfMonth","date"))
                        ,expression("month", projection("$month","date"))
                        ,expression("year", projection("$year","date"))
                      )
                .sort(Sort.ascending("_id"))
                .aggregate(MyDate.class, AggregationOptions.builder().batchSize(100).outputMode(OutputMode.CURSOR).build());

现在,我想在Morphia中重写此MongoDB聚合,该聚合有两组需要累积的数组-

db.findings.aggregate([ { $group : { _id : {$dayOfYear : "$df"}, ts: { $push: {t:"$c"} }, prs: { $push: {pr:"$p"} } } } ])

为此,我使用了与上述相同的Morphia查询,但添加了第二个分组 Group.grouping("prs", Accumulator.accumulator("$push","p")),然后将其添加到.project-projection("prs")

这似乎不起作用。我在做什么错了?

1 个答案:

答案 0 :(得分:0)

问题不是查询所致;就是我要检索的数组的域对象字段类型。

我本应该创建String[]时创建了Integer[]。更正该问题已解决。

我真的希望Morphia抛出适当的错误,以便我可以在这个年龄段之前进行调试。