如何在 Morphia 查询中包含带有累加器的多个分组?
How to include multiple groupings with accumulators in a Morphia query?
我正在尝试查询我的数据库中的集合并按日期字段聚合它们。为此,我编写了这个查询,它获取数组中的字段并按日期对它们进行分组 -
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 查询,但包含了第二个 grouping Group.grouping("prs", Accumulator.accumulator("$push","p"))
,然后将其添加到 .project
- projection("prs")
.
这似乎不起作用。我做错了什么?
问题不在于查询;它与我尝试检索的数组的域对象字段类型有关。
我本应创建 Integer[]
,却创建了 String[]
。更正该问题已解决。
我真的希望 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 查询,但包含了第二个 grouping Group.grouping("prs", Accumulator.accumulator("$push","p"))
,然后将其添加到 .project
- projection("prs")
.
这似乎不起作用。我做错了什么?
问题不在于查询;它与我尝试检索的数组的域对象字段类型有关。
我本应创建 Integer[]
,却创建了 String[]
。更正该问题已解决。
我真的希望 Morphia 抛出适当的错误,这样我就可以在很久以前调试它。