Неполный совокупный результат с Джонго

Я использую агрегатную среду MongoDB для запроса документа, результаты следующие:

{
        "result" : [
                {
                        "_id" : "luke",
                        "times" : 8
                },
                {
                        "_id" : "albert",
                        "times" : 4
                },
                {
                        "_id" : "matt",
                        "times" : 4
                }
        ],
        "ok" : 1
}

Как видно из приведенного выше результата, запрос работает в оболочке mongoDB, но у меня есть проблема при получении результатов с помощью Jongo:

        Aggregationoutput = 
                gamesCollection.aggregate(
                "{ ... }"
                ).as(Aggregation.class);
        output.results().iterator().hasNext();

Кажется, главная проблема в том, что Jongo не позволяет мне использовать AggregationOutput? он хочет вместо Aggregation... но не могу найти ни одного примера о том, как его использовать

РЕДАКТИРОВАТЬ: Я немного расстроен, что я не могу заставить Джонго работать с совокупностью. Я должен был написать запрос с DBObjects как указано в драйвере MongoDB Java, но код выглядит действительно некрасиво..

РЕДАКТИРОВАТЬ 2: Просто, чтобы завершить информацию, это оригинальный агрегат, который я использовал с Jongo, который не смог разобрать ResultObject

List<ResultObject> output = 
                gamesCollection.aggregate(
                "{ $match: { 'playersList.playerid': 'bob' }},"
                +"{ $unwind: '$playersList' },"
                +"{ $match: { 'playersList.playerid':  { $ne: 'bob' } } },"
                +"{ $group: { _id: '$playersList.playerid', times: { $sum : 1} } },"
                +"{ $sort: { times: -1 } }"
                ).as(ResultObject.class);

class ResultObject{
  String _id;
  int times;
}

}

2 ответа

Вы можете использовать функцию агрегирования, такую ​​как find/findOne... Результаты автоматически передаются в Pojo:

List<Email> emails = collection.aggregate("{$project:{sender:1}}")
          .and("{$match:{tags:'read'}}")
          .and("{$limit:10}")
          .as(Email.class);

Вы можете найти больше примеров здесь: https://github.com/bguerout/jongo/blob/master/src/test/java/org/jongo/AggregateTest.java

Я только что видел этот вопрос сейчас, но я надеюсь, что он может помочь другим. Вы можете создать внутренний класс следующим образом:

private static class AggregateResult {
        String _id;
        int time;
    }

И вызовите агрегатную функцию следующим образом:

List<AggregateResult> res =  gamesCollection.aggregate(
                "{ ... }"
                ).as(AggregateResult.class);

Затем вы можете перебрать результаты в списке res.

Другие вопросы по тегам