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

MongoDB聚合查询需求:按服务器分组统计Running状态文档数

解决MongoDB按服务器统计Running状态文档数的问题

你当前的聚合查询只完成了过滤和字段投影,缺少分组统计的阶段,所以会返回所有符合条件的单条文档。要实现按服务器分组计数,需要在聚合管道中添加$group阶段,优化后的查询如下:

db["server-status"].aggregate([
  // 第一步:先过滤出状态为Running的文档,减少后续处理数据量
  {
    $match: { status: "Running" }
  },
  // 第二步:按主机名和状态分组,统计每组的文档数量
  {
    $group: {
      _id: { host: "$host", status: "$status" },
      count: { $sum: 1 }
    }
  },
  // 可选:调整输出格式,让结果更直观(去掉_id嵌套,直接展示字段)
  {
    $project: {
      _id: 0,
      host: "$_id.host",
      status: "$_id.status",
      count: 1
    }
  }
])

各阶段说明:

  • $match:优先过滤出status: "Running"的文档,避免对无关数据进行后续处理,提升查询性能。
  • $group:以host和status作为分组依据(因为所有文档状态都是Running,也可以只按host分组),用$sum:1统计每组的文档数量,每匹配到一个文档计数加1。
  • $project:将_id中的嵌套字段展开,去掉默认的_id字段,输出你需要的host、status、count三个字段,结果格式更贴合需求。

查询结果示例:

{ "host" : "SERVER1", "status" : "Running", "count" : 4 }
{ "host" : "SERVER3", "status" : "Running", "count" : 2 }

如果不需要显式输出status字段(因为已经过滤为Running),可以简化$group和$project阶段:

db["server-status"].aggregate([
  { $match: { status: "Running" } },
  {
    $group: {
      _id: "$host",
      count: { $sum: 1 }
    }
  },
  {
    $project: {
      _id: 0,
      host: "$_id",
      status: "Running",
      count: 1
    }
  }
])

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 08:04:56