按组合的_id Morphia中的日期进行汇总

时间:2018-09-25 13:41:37

标签: java aggregation-framework morphia

我需要在Morphia中复制这样的聚合

db.getCollection('forecasting').aggregate(
[
    {
        $match:{
            ....
            }
    },
    {
        $group: {
                    _id:{id:"$id", date:"$date", hour:{$hour:"$date"}},
                    property1: {$sum:"$property1"},
                    property2: {$sum:"$property2"}
            }
    }
])

但是我似乎无法在Morphia中复制它,特别是hour:{$hour:"$date"}组。 如果我对该字段进行投影,将生成以下内容:"hour" : "$date",但是我需要生成$hour运算符。

 Group idGroup = Group.grouping("_id",
                                   Projection.projection(ID_FIELD, ID_FIELD),
                                   Projection.projection(DATE_FIELD, DATE_FIELD),
                                   Projection.projection("hour", DATE_FIELD);

mongoDataStore.createAggregation(XXX.class)                                                                
              .match(query)                                                                
              .group(idGroup);

如果我将日期组添加为另一个组,例如:

mongoDataStore.createAggregation(XXX.class)
              .match(query)
              .group(idGroup,dateGroup)

我收到以下错误:

  

命令失败,错误40234(Location40234):服务器上的“ $ hour字段必须是累加器对象”

1 个答案:

答案 0 :(得分:0)

我在这个问题Aggregation by date in Morphia

中找到了解决方案

您必须使用接受多个Group.id的{​​{1}}方法,以便可以使用Groups来应用Accumulator运算符