Spring boot: агрегация группирования запросов ежемесячно - PullRequest
0 голосов
/ 20 декабря 2018

У меня есть несколько объектов, таких как:

{
    "_id" : ObjectId("5c0fed1069ca9d0001a9b654"),
    "timestamp" : ISODate("2018-12-11T17:00:00.388Z"),
    "application" : "RDOCUI",
    "uploadedRefs" : NumberLong(1),
    "uploadedKb" : NumberLong(101297103)
}
{
    "_id" : ObjectId("5c0ffb2069ca9d0001a9b657"),
    "timestamp" : ISODate("2018-12-11T18:00:00.399Z"),
    "application" : "RDOCUI",
    "uploadedRefs" : NumberLong(0),
    "uploadedKb" : NumberLong(0)
}
{
    "_id" : ObjectId("5c10093069ca9d0001a9b65c"),
    "timestamp" : ISODate("2018-12-11T19:00:00.377Z"),
    "application" : "RDOCUI",
    "uploadedRefs" : NumberLong(1),
    "uploadedKb" : NumberLong(3879)
}
{
    "_id" : ObjectId("5c10174069ca9d0001a9b663"),
    "timestamp" : ISODate("2018-12-11T20:00:00.373Z"),
    "application" : "RDOCUI",
    "uploadedRefs" : NumberLong(3),
    "uploadedKb" : NumberLong(167901)
}

Мне нужно сначала выбрать документы, где application = XAPP и сгруппировать их по месяцам, и получить какие из них на сумму uploadedRefs > XREFS.

SELECT * FROM METRICS 
  WHERE application = 'XAPP'
  GROUP BY MONTHLY
  HAVING SUM(uploadedRefs) > XREFS

Есть идеи?

До сих пор мне удавалось построить эту агрегацию:

MatchOperation applicationMatchStage = 
    Aggregation.match(Criteria.where("application").is(code));
    GroupOperation groupByStateAndSumMetrics = 
        Aggregation.group("application")
        .sum("uploadedRefs").as("refs")
        .sum("uploadedKb").as("kbs");
    MatchOperation havingMatchStage = Aggregation.match(Criteria.where("uploadedRefs").is(10));

    Aggregation aggregation = Aggregation.newAggregation(
        applicationMatchStage,
        groupByStateAndSumMetrics,
        havingMatchStage);

, но я не совсем понял, как построить "group monthly"

...