MongoDB获取每个日期的最高价值并将其放入数组

时间:2018-12-11 15:07:23

标签: javascript node.js mongodb

获取每个“日期”的最高“得分”并将其存储到数组中的最佳方法是什么。假设某个特定日期的得分超过50。

数据库看起来像这样

 {
   "_id" : ObjectId("5c06b91b583248493294"),
   "classid" : "00010109e2",
   "score" : 720,
   "height" : 1440,
   "time" : "2018-11-27T18:05:13.297621823Z",
   "__v" : 0
 }

我想做的是从2周左右的日期范围中获得每个日期的最高分,并以简单的数组存储每个日期的最高分。

我尝试了很多事情,包括无济于事的递归。

任何人都可以阐明这一点,或指向正确的方向吗?

1 个答案:

答案 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时间戳。