Spring Mongo - Aggregate Query работает в CLI / Robo3t, но не в Spring - PullRequest
0 голосов
/ 07 сентября 2018

Я использую spring-data-mongodb v1.10.3 Совокупный запрос работает в cli / robo3t, но я не могу перевести его в Spring.

db.getCollection('transaction').aggregate(
[ 
{ 
    $match : { 
        effectiveDate : { 
            $gte : ISODate("2018-09-06T04:00:00.000Z") , // Spring aggregation puts these clauses as $gte : { $date: <date> }
            $lte : ISODate("2018-09-11T03:59:59.000Z")
            } , 
         status : "external_received"}
     } 
     , 
 { 
     $group : { 
         _id : { portfolio : "$portfolio" , processor : "$processor" , transactionType : "$transactionType"} , 
         amount : { $sum : "$amount"}
         }
     }
 ]
)

Код Spring «работает» в том смысле, что он не выдает никаких ошибок, однако возвращает пустой результат.

public List<TransactionReport> getTransactionReport(Date begin, Date end) {
    Aggregation aggregation = portfolioAggregation(begin, end);
    System.out.println(aggregation.toString());
    AggregationResults<TransactionReport> results = mongoTemplate.aggregate(aggregation, Transaction.class, TransactionReport.class);
    return results.getMappedResults();
}

private Aggregation portfolioAggregation(Date begin, Date end) {
    Criteria f = Criteria.where("effectiveDate").gte(begin).lte(end).and("status").is("received");
    MatchOperation filter = match(f);
    GroupOperation groupOperation = group("portfolio", "processor", "transactionType").sum("amount").as("amount");
    return Aggregation.newAggregation(filter, groupOperation).withOptions(Aggregation.newAggregationOptions().cursor(getCursor()).build());
}

private DBObject getCursor() {
    DBObject cursor = new BasicDBObject();
    cursor.put("batchSize", 10);
    return cursor;
}

Обновление: Spring Code возвращает фактический результат в results.getRawResults()

Структура {"cursor": {firstBatch: [<result>,...,<result>]}}

По-прежнему изыскиваем способ сериализации результатов в классе TransactionReport элегантно

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...