You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MongoDB聚合分组后排序出现Token错误求助

MongoDB 按年月分组后排序的正确聚合写法

错误原因分析

你的语法错误核心是聚合阶段的数组结构写错了:MongoDB的aggregate()方法接收的是一个阶段数组,每个阶段必须是数组中的独立对象,不能把$group和$sort放在同一个大括号里。

你之前的写法里,把$group和$sort嵌套在同一个对象中,违反了JSON语法规则(一个对象不能有多个顶级的$group、$sort键),所以会报Unexpected token错误。另外,分组后year和month存在于_id对象下,直接用year:1排序找不到对应字段,必须用"_id.year"来引用。

正确的聚合查询写法

db.xxxx.aggregate([
  {
    $group: {
      _id: { 
        year: { $year: "$createdDate" },
        month: { $month: "$createdDate" }
      },
      total_users: { $sum: 1 }
    }
  },
  {
    $sort: {
      "_id.year": 1,  // 按年份升序
      "_id.month": 1  // 按月份升序
    }
  }
])

关键说明

  • 阶段数组结构:每个聚合阶段($group、$sort)都是数组中的独立对象,用逗号分隔,整个数组包裹在[]中。
  • 排序字段引用:分组后的文档里,年份和月份属于_id的子字段,排序时必须通过"_id.year"、"_id.month"指定。
  • 多余逗号清理:原分组查询中$group对象结束后有个多余的逗号,虽然部分解析器能兼容,但建议去掉以避免潜在语法问题。

内容的提问来源于stack exchange,提问作者MetaCoder

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 10:35:33