【问题标题】:using $addToset with java morphia aggregation将 $addToset 与 java morphia 聚合一起使用
【发布时间】:2015-08-31 11:41:46
【问题描述】:

我有 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(...);

【问题讨论】:

    标签: java mongodb morphia


    【解决方案1】:

    目前不支持,但如果您提交issue,我很乐意将其包含在即将发布的版本中。

    【讨论】:

      【解决方案2】:

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

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

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

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

      Java 代码为:grouping("messageDataSet", addToSet("messageDataSet")),

      这适用于 mopria。谢谢。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-11-25
        • 1970-01-01
        • 1970-01-01
        • 2016-02-10
        • 2017-06-05
        • 1970-01-01
        • 2020-05-14
        • 1970-01-01
        相关资源
        最近更新 更多