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

如何在MongoDB聚合查询中同时获取总记录数与全部数据

同时获取聚合结果和总记录数的解决方案

我懂你的需求啦——现在你的聚合查询已经能拉到符合条件的路灯数据,但想一次查询就搞定数据列表+总记录数,不用跑两次查询对吧?MongoDB的$facet阶段正好能解决这个问题,它允许你在同一个聚合管道里并行执行多个子管道,完美满足你的需求。

修改后的完整查询语句

db.STREETLIGHTS.aggregate([
  // 保留你原来的匹配条件
  {$match : {"CreateDate":{$gt: new Date(ISODate("2018-04-09T23:54:16.064Z") - 24*60*60 * 1000)}}},
  // 使用$facet拆分两个任务:拿数据、统计总数
  {$facet: {
    // 第一个子管道:获取所有符合条件的记录(和你原来的查询逻辑一致)
    "data": [
      { $project: {_id:1, SLC_ID:1,LONGITUDE:1,LATITUDE:1,DCUID:1,CUMILITIVE_KWH:1,LAMPSTATUS:1,CreateDate:1 } }
      // 如果需要分页,在这里加上$skip和$limit就行,比如:
      // {$skip: 0},
      // {$limit: 10}
    ],
    // 第二个子管道:统计总记录数
    "totalCount": [
      {$count: "count"}
    ]
  }}
])

结果说明

返回的结果会是一个包含两个字段的文档:

  • data:数组,里面就是你原来查询想要的所有路灯记录;
  • totalCount:数组,里面只有一个对象,count字段的值就是符合$match条件的总记录数(比如[{"count": 123}])。

为什么这么做?

相比分开跑两次查询(一次查数据、一次count),用$facet的优势是只需要一次数据库请求,既减少了网络开销,也能保证数据的一致性(避免两次查询之间数据发生变化)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 04:07:36