2015-09-20 77 views
1

任何人都可以幫助我將這個mongoDB聚合轉換爲彈簧數據mongo嗎?從MongoDb聚合查詢中創建Spring Data Aggregation

我試圖在每個邀請文檔中獲取未提醒的與會者電子郵件列表。

得到它在mongo shell中工作,但需要在Spring數據mongo中完成。

我的殼查詢

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"} 
     } 
    } 
] 

這是我想出了,你可以看到,它的工作不是在流水線的一個項目,集團化運作的預期。生成的查詢如下。

聚合對象創建

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") 
    ); 

它創建下面的查詢通過聚合對象生成

查詢

{ "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"}}}]} 

我不知道用聚合的正確方法在春季數據組mongo。

有人可以幫我請或提供與$推等組聚合鏈接?

回答