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

如何用MongoDB聚合管道筛选并返回指定字段最大值的文档?

MongoDB聚合管道解决方案:按分组保留最大字段值文档

现有Mongoose Schema定义

// mongoose schema format
mongoose.Schema(
  {
    businessID: { type: String, index: true },
    userID: { type: String, index: true },
    userBusinessID: { type: Number, index: true },
    data: { type: String },
  }
);

数据集

db.data.find({})
[
  {
    businessID: 'B1',
    userID: 'U1',
    userBusinessID: 1,
    data: "hello1"
  },
  {
    businessID: 'B1',
    userID: 'U1',
    userBusinessID: 2,
    data: "hello2"
  },
  {
    businessID: 'B2',
    userID: 'U1',
    userBusinessID: 1,
    data: "hello4"
  },
  {
    businessID: 'B1',
    userID: 'U2',
    userBusinessID: 1,
    data: "hello5"
  },
]

期望结果(筛选userID为"U1",并保留每组最大userBusinessID的文档)

// Expected return data of userID "U1"
[
  {
    businessID: 'B1',
    userID: 'U1',
    userBusinessID: 2, // 同一businessID和userID下,返回userBusinessID更大的文档
    data: "hello2"
  },
  {
    businessID: 'B2',
    userID: 'U1',
    userBusinessID: 1,
    data: "hello4"
  }
]

聚合管道实现方案

通过4个阶段的聚合管道可实现需求逻辑:

  • $match:过滤目标文档,减少后续处理数据量
  • $sort:按分组字段升序、目标字段降序排序,确保同组内最大值文档排在首位
  • $group:按userID和businessID分组,取每组首个文档(即最大值对应文档)
  • $replaceRoot:将分组后嵌套的文档还原为顶层结构

完整聚合管道代码:

db.data.aggregate([
  // 阶段1:匹配userID为U1的文档
  {
    $match: { userID: "U1" }
  },
  // 阶段2:按userID、businessID升序,userBusinessID降序排序
  {
    $sort: {
      userID: 1,
      businessID: 1,
      userBusinessID: -1
    }
  },
  // 阶段3:按userID和businessID分组,取每组第一个文档
  {
    $group: {
      _id: {
        userID: "$userID",
        businessID: "$businessID"
      },
      maxDoc: { $first: "$$ROOT" }
    }
  },
  // 阶段4:将嵌套的maxDoc还原为根文档
  {
    $replaceRoot: { newRoot: "$maxDoc" }
  }
])

执行结果

执行上述管道后,返回结果与期望完全一致:

[
  {
    "_id": ObjectId("..."),
    "businessID": "B1",
    "userID": "U1",
    "userBusinessID": 2,
    "data": "hello2"
  },
  {
    "_id": ObjectId("..."),
    "businessID": "B2",
    "userID": "U1",
    "userBusinessID": 1,
    "data": "hello4"
  }
]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 14:01:40