У меня есть несколько объектов, таких как:
{
"_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"