Sha*_*med 2 java spring mongodb spring-data-mongodb
任何人都可以帮我将这个mongoDB聚合转换为spring数据mongo吗?
我想在每个邀请文档中获取未提醒的与会者电子邮件列表.
得到它在mongo shell中工作,但需要在Spring数据mongo中完成.
我的shell查询
db.invitation.aggregate(
[
{ $match : {_id : {$in : [id1,id2,...]}}},
{ $unwind : "$attendees" },
{ $match : { "attendees.reminded" : false}},
{ $project : {_id : 1,"attendees.contact.email" : 1}},
{ $group : {
_id : "$_id",
emails : { $push : "$attendees.contact.email"}
}
}
]
Run Code Online (Sandbox Code Playgroud)
)
这就是我提出的,正如您所看到的,它在管道的项目和组操作中的工作效果并不如预期.生成的查询如下.
聚合对象创建
Aggregation aggregation = newAggregation(
match(Criteria.where("_id").in(ids)),
unwind("$attendees"),
match(Criteria.where("attendees.reminded").is(false)),
project("_id","attendees.contact.email"),
group().push("_id").as("_id").push("attendees.contact.email").as("emails")
);
Run Code Online (Sandbox Code Playgroud)
它创建以下查询
Aggregation对象生成的查询
{ "aggregate" : "__collection__" , "pipeline" : [
{ "$match" : { "_id" : { "$in" : [id1,id2,...]}}},
{ "$unwind" : "$attendees"},
{ "$match" : { "attendees.reminded" : false}},
{ "$project" : { "_id" : 1 , "contact.email" : "$attendees.contact.email"}},
{ "$group" : { "_id" : { "$push" : "$_id"}, "emails" : { "$push" : "$attendees.contact.email"}}}]}
Run Code Online (Sandbox Code Playgroud)
我不知道在spring data mongo中使用Aggregation Group的正确方法.
有人可以帮助我,或者用$ push等提供群组聚合的链接?
Pra*_*gat 11
正确的语法是:
Aggregation aggregation = newAggregation(
match(Criteria.where("_id").in(ids)),
unwind("$attendees"),
match(Criteria.where("attendees.reminded").is(false)),
project("_id","attendees.contact.email"),
group("_id").push("attendees.contact.email").as("emails")
);
Run Code Online (Sandbox Code Playgroud)
参考:http://docs.spring.io/spring-data/mongodb/docs/current/reference/html/#mongo.group
| 归档时间: |
|
| 查看次数: |
17523 次 |
| 最近记录: |