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

MongoDB如何查询集合中year和week_number取值最高的全部文档

错误原因

你当前的查询写法不符合MongoDB聚合语法规则:$max是聚合运算符,无法直接在$match的$expr中这样使用,相当于没有配置有效过滤条件,所以会返回全量文档。

正确聚合查询写法

完整的聚合管道如下:

[
  // 统计全集合的最大年份、最大周数,同时暂存所有原始文档
  {
    $group: {
      _id: null,
      maxYear: { $max: "$year" },
      maxWeek: { $max: "$week_number" },
      docs: { $push: "$$ROOT" }
    }
  },
  // 展开暂存的文档数组,变回单条文档结构
  { $unwind: "$docs" },
  // 过滤出符合「年份=最大年份且周数=最大周数」条件的文档
  {
    $match: {
      $expr: {
        $and: [
          { $eq: ["$docs.year", "$maxYear"] },
          { $eq: ["$docs.week_number", "$maxWeek"] }
        ]
      }
    }
  },
  // 还原原始文档的结构作为最终返回结果
  { $replaceRoot: { newRoot: "$docs" } }
]

逻辑说明

先用$group一次性算出全集合最高的年份maxYear和最高周数maxWeek,同时把所有原始文档存入docs数组;展开数组后过滤同时满足两个最大值条件的文档,最后用$replaceRoot把原始文档还原成返回结果的根结构,就能得到所有符合要求的完整文档。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 20:24:03