首页 > 解决方案 > Mongoose:如何使用两个字段对聚合响应进行排序

问题描述

我有这个猫鼬查询:

 MinutesSpentStudying.aggregate([
    { $match: { connected_user_id: ObjectId(user_id) } },
    {
      $project: {
        minutes_spent_studying: 1,
        year: { $year: "$date" },
        day: { $dayOfMonth: "$date" },
      },
    },
    {
      $group: {
        _id: {
          day: "$day",
          year: "$year",
        },
        total_minutes: { $sum: "$minutes_spent_studying" },
      },
    },
    { $sort: { _id: 1 } },
  ]);

它返回此响应:

[
    {
        "_id": {
            "day": 2,
            "year": 2021
        },
        "total_minutes": 11
    },
    {
        "_id": {
            "day": 3,
            "year": 2021
        },
        "total_minutes": 1
    },
    {
        "_id": {
            "day": 26,
            "year": 2020
        },
        "total_minutes": 1
    },
    {
        "_id": {
            "day": 27,
            "year": 2020
        },
        "total_minutes": 3
    },
]

我希望它按年排序,然后按天排序,以便它返回 2020 年的结果,然后是 2021 年的结果。

知道如何配置以实现此结果吗?

标签: javascriptnode.jsmongodbmongooseaggregate

解决方案


您可以按多个字段排序,并对嵌套字段使用点表示法:

{
    $sort: {
        "_id.year": 1,
        "_id.day": 1
    }
}

蒙戈游乐场


推荐阅读