春季启动:每月汇总查询分组

时间:2018-12-20 11:29:34

标签: spring spring-boot mongodb-query spring-data-mongodb

我有几个对象,例如:

{
    "_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"

0 个答案:

没有答案