我试图通过从名为“访问者”的集合中过滤日期来获取ReactiveMongo 0.12和Play Framework 2.6中的聚合(使用JSON 集合- 而不是BSON )。典型的文档可能如下所示:
{ "_id": ObjectID("59c33152ca2abb344c575152"), "placeId": ObjectID("59c33152ca2abb344c575152"), "date": ISODate("2017-03-26T00:00:00Z"), "visitors": 1200 }
因此,我想从这里聚合这些数据以获取各种访问者总数、平均值等,按placeId分组(标识另一个集合中的地点)并按 2016 年 5 月 15 日之后的日期进行过滤。
我基于这个类似的问题 - 没有匹配它可以工作但有它 - 它没有。没有错误,但它不起作用:
def getVisitorAggregate(col: JSONCollection) = {
import col.BatchCommands.AggregationFramework.{Group, Match, SumField, AvgField, MinField, MaxField}
val format = new java.text.SimpleDateFormat("dd-MM-YYYY")
val myDate = "15-05-2016"
val parseDate: Date = format.parse(myDate)
val longDate: Long = parseDate.getTime
col.aggregate(
Group(JsString("$placeId"))(
"totalVisitors" -> SumField("visitors"),
"avgVisitors" -> AvgField("visitors"),
"minVisitors" -> MinField("visitors"),
"maxVisitors" -> MaxField("visitors")
),
List(Match(Json.obj("date" -> Json.obj("$gte" -> JsNumber(longDate)))))
)
.map(_.head[VisitorAggregate])
}
我已经在网上查看和测试了很多小时,但我找不到正确的语法,但这对于知道我确定的人来说很简单。谢谢