Получить различные значения, отсортированные по сумме сгруппированных данных с разбивкой по страницам MongoDB - PullRequest
0 голосов
/ 10 мая 2019

Я работаю с Spring Boot v2.0.5.У меня есть мои данные, как показано ниже:

[
    {
        "name": "bob",
        "score": 20,
        "date": 1578940321
    },
    {
        "name": "tom",
        "score": 20,
        "date": 1578940321
    },
    {
        "name": "mike",
        "score": 20,
        "date": 1578965903
    },
    {
        "name": "bob",
        "score": 10,
        "date": 1578965903
    },
    {
        "name": "tom",
        "score": 10,
        "date": 1578965903
    }
]

Я пытаюсь создать какой-то отчет между двумя датами с нумерацией страниц.Допустим, нам нужно 2 разных имени на страницу.

Отчет должен быть отсортирован по сумме баллов каждой записи, сгруппированной по имени.например, Боб 30, Том 30, Майк 20 на время между 1578940321 до 1578965903.

Как я могу получить различные имена на странице, например, Боб и Том для страницы 1 и Майк для страницы 2.

Ниже я попробовал:

Подход 1

    DistinctIterable list = mongoTemplate.getCollection(statsCollectionName)
            .distinct("name", query.getQueryObject(), Object.class);

Подход 2

    Bson pika = BsonDocument.parse(String.format("{'date': {$gte: %d, $lte: %d}}", startStamp, endDate));

    DistinctIterable<Document> p = mongoTemplate.getCollection(statsCollectionName)
            .distinct("name", Document.class).filter(pika);

    p.iterator().forEachRemaining(x -> {
        System.out.println("");
    });

Я не могу заставить его работать.

1 Ответ

0 голосов
/ 11 мая 2019

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

db.st20.aggregate([{$group : {_id:"$name", totalScore: {$sum: "$score"}  }  }, {$sort:  {totalScore:-1} }, {$limit: 2}])

Возможный вывод:

{ "_id" : "bob", "totalScore" : 30 }
{ "_id" : "tom", "totalScore" : 30 }

Вы можете передать значение $limit как переменную в приведенном выше запросе.

Для остроумного запроса в репозитории Spring Data, пожалуйста, проверьте официальную документацию Поддержка Aggregation Framework

Примеры агрегации весенних данных: https://www.baeldung.com/spring-data-mongodb-projections-aggregations

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