Mongoose:如何使用两个字段对聚合响应进行排序

Posted

技术标签:

【中文标题】Mongoose:如何使用两个字段对聚合响应进行排序【英文标题】:Mongoose: How to sort aggregate response with two fields 【发布时间】:2021-04-20 12:24:05 【问题描述】:

我有这个猫鼬查询:

 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 年的结果。

知道如何配置以达到此结果吗?

【问题讨论】:

【参考方案1】:

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


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

Mongo Playground

【讨论】:

以上是关于Mongoose:如何使用两个字段对聚合响应进行排序的主要内容,如果未能解决你的问题,请参考以下文章

Mongoose - 如何聚合两个集合中的内容

匹配 Mongoose 中的两个不同字段,聚合?

带有全文搜索和项目的 Mongoose 子字段聚合

如何在 MongoDB 中对聚合查询结果进行分页并获得总文档数(Node.js + Mongoose)?

如何获取文档 MangoDB&Mongoose 上的特定字段并聚合一些字段?

如何按热门字段(文本字段)对聚合进行排序?或者是不是有可能按文本字段对聚合进行排序(不使用_term)