获取每个“日期”的最高“得分”并将其存储到数组中的最佳方法是什么。假设某个特定日期的得分超过50。
数据库看起来像这样
{
"_id" : ObjectId("5c06b91b583248493294"),
"classid" : "00010109e2",
"score" : 720,
"height" : 1440,
"time" : "2018-11-27T18:05:13.297621823Z",
"__v" : 0
}
我想做的是从2周左右的日期范围中获得每个日期的最高分,并以简单的数组存储每个日期的最高分。
我尝试了很多事情,包括无济于事的递归。
任何人都可以阐明这一点,或指向正确的方向吗?
答案 0 :(得分:0)
您应该研究mongodb aggregation,尤其是$group运算符,它通常用于执行此类操作。
在这种情况下,您的代码将如下所示:
Scores.aggregate([
{
$match: {
time: {
$gte: startOfSomePeriod,
$lte: endOfSomePeriod
}
}
},
{
$group: {
_id: {
year: { $year: "$time" },
month: { $month: "$time" },
day: { $dayOfMonth: "$time" }
},
score: { $max: "$score" }
}
}
]);
P.S。您只需在架构定义中添加一个选项,即可使用猫鼬默认的createdAt时间戳。