2015-10-28 3 views
2

Мой следующий запрос MongoDB работает, как ожидалосьMongoTemplate: значения суммы ключей для документов, соответствующих определенному критерию

db.importedDataItems.aggregate({ 
    $match: { 
     mobile: "1234567890" 
    } 
}, { 
    $group: { 
     _id: 'mobile', 
     calls: { $sum: '$calls' } 
    } 
}) 

, но даже после того, как со ссылкой на thesequestions & tutorial, его эквивалент кода Java ...

Aggregation agg = Aggregation.newAggregation(Aggregation.match(Criteria.where("mobile").is("1234567890"), 
    Aggregation.group("mobile").sum("calls").as("totalCalls"), 
    Aggregation.project("totalCalls")); 
AggregationResults<Doc> results = mongoTemplate.aggregate(agg, "yoCollection", 
    Doc.class); 
Doc doc = results.getMappedResults().get(0); 

... возвращает пустой список & throws IndexOutOfBoundsException хотя мой запрос возвращает результаты на консоли!

ответ

0

У вас не хватает закрывающей скобки для параметра match():

import static org.springframework.data.mongodb.core.aggregation.Aggregation.*; 

Aggregation agg = Aggregation.newAggregation(
     match(Criteria.where("mobile").is("1234567890")), // <-- missing closing parenthesis 
     group("mobile").sum("calls").as("totalCalls") 
     project("totalCalls") 
    ); 

AggregationResults<Doc> results = mongoTemplate.aggregate(agg, "yoCollection", Doc.class); 
Doc doc = results.getMappedResults().get(0); 
+0

После переформатирования длинноцепочечных методы, это работает! Спасибо, возможно, недостающая закрывающая скобка была проблемой, но мне интересно, почему затмение не предупредило меня :) – parth