使用$ addToset和java morphia聚合

时间:2015-08-31 11:41:46

标签: java mongodb morphia

我有mongodb聚合查询,它在shell中运行良好。 如何重写此查询以与morphia一起使用?

org.mongodb.morphia.aggregation.Group.addToSet(String field)只接受一个字段名称,但我需要将对象添加到集合中。

查询:

......aggregate([
{$group: 
    {"_id":"$subjectHash",
        "authors":{$addToSet:"$fromAddress.address"},
 ---->> "messageDataSet":{$addToSet:{"sentDate":"$sentDate","messageId":"$_id"}},
        "messageCount":{$sum:1}}},
        {$sort:{....}},
        {$limit:10},
        {$skip:0}
        ])

Java代码:

  AggregationPipeline aggregationPipeline = myDatastore.createAggregation(Message.class)
                    .group("subjectHash",
                            grouping("authors", addToSet("fromAddress.address")),
 --------??????------>>     grouping("messageDataSet", ???????),
                            grouping("messageCount", new Accumulator("$sum", 1))
                    ).sort(...)).limit(...).skip(...);

2 个答案:

答案 0 :(得分:1)

目前尚不支持,但如果您要提交issue,我很乐意将其纳入即将发布的版本中。

答案 1 :(得分:0)

感谢您的回答,我可以根据源代码猜测。 :(

我不想直接使用spring-data或java-driver(对于这个项目)所以我改变了我的文档表示。

添加了messageDataSet对象,其中包含sentDatemessageId(以及其他一些嵌套对象)(这些值在文档中重复,这是一个糟糕的设计)。

聚合变为:"messageDataSet":{$addToSet:"$messageDataSet"},

和Java代码是:grouping("messageDataSet", addToSet("messageDataSet")),

这适用于moprhia。感谢。