具有对象推送的Morphia聚合阶段组

时间:2017-02-23 17:17:51

标签: java mongodb morphia

我正在使用最新版本的morphia(1.3.2),我试图在Java中复制以下成功的mongodb聚合阶段:

{
  _id: null,
  pv: { $push: { t: '$_id', c: '$c' }}
}

舞台的示例输入是:

{ 
    "_id" : NumberLong(1487808017), 
    "c" : NumberInt(1)
}
{ 
    "_id" : NumberLong(1487808210), 
    "c" : NumberInt(1)
}
{ 
    "_id" : NumberLong(1487808914), 
    "c" : NumberInt(1)
}

,预期输出为:

{ 
    "_id" : null, 
    "pv" : [
        {
            "t" : NumberLong(1487808017), 
            "c" : NumberInt(1)
        }, 
        {
            "t" : NumberLong(1487808210), 
            "c" : NumberInt(1)
        }, 
        {
            "t" : NumberLong(1487808914), 
            "c" : NumberInt(1)
        }
}

我到目前为止最接近的是:

.group(Group.grouping("pv", Accumulator.accumulator("$push", (Object) "{t: '$_id', c: '$c'}")))

但是morphia将我的累加器解释为显式字符串。

如果有人可以建议正确的Java语法来实现这个操作,那将非常感激。

1 个答案:

答案 0 :(得分:3)

Gah,经过几个小时的搜索,我在OP的几分钟内找到了答案:

.group(Group.grouping("pv", Group.grouping("$push", Projection.projection("t", "_id"), Projection.projection("c", "c"))))

我在浏览morphia测试here时遇到了可能的解决方案。