我有几个对象,例如:
{
"_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"