我有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(...);
答案 0 :(得分:1)
目前尚不支持,但如果您要提交issue,我很乐意将其纳入即将发布的版本中。
答案 1 :(得分:0)
感谢您的回答,我可以根据源代码猜测。 :(
我不想直接使用spring-data或java-driver(对于这个项目)所以我改变了我的文档表示。
添加了messageDataSet
对象,其中包含sentDate
和messageId
(以及其他一些嵌套对象)(这些值在文档中重复,这是一个糟糕的设计)。
聚合变为:"messageDataSet":{$addToSet:"$messageDataSet"},
和Java代码是:grouping("messageDataSet", addToSet("messageDataSet")),
这适用于moprhia。感谢。