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

MongoDB按日期分组获取温度值的实现方案咨询

实现MongoDB按日期分组并生成国家温度映射的聚合查询

核心聚合查询方案

直接使用MongoDB的聚合管道就能完成需求,避免在Node.js中做额外计算,以下是完整查询:

db.temperatures.aggregate([
  // 按日期分组,收集每个日期对应的国家-温度键值对
  {
    $group: {
      _id: "$date",
      tempEntries: {
        $push: {
          k: "$country",
          v: "$avg_temperature"
        }
      }
    }
  },
  // 将数组格式的键值对转换为目标对象结构
  {
    $project: {
      _id: 0,
      date: "$_id",
      avg_temperatures: { $arrayToObject: "$tempEntries" }
    }
  },
  // 可选:按日期升序排序,适配时间线图表的遍历逻辑
  {
    $sort: { date: 1 }
  }
])

各阶段说明

  • $group阶段:以date作为分组依据,通过$push把每个文档的country(作为对象键)和avg_temperature(作为对象值)收集成结构化数组。
  • $project阶段:用$arrayToObject将数组转换为指定的avg_temperatures对象,同时重命名字段并移除默认的_id。
  • $sort阶段:可选但推荐,按日期排序后,结果可以直接按顺序遍历生成时间线,无需在Node.js中二次排序。

可视化优化思路

如果后续需要做温度数值的对比分析(比如跨单位统一计算),可以在聚合阶段提前处理单位转换,示例如下:

db.temperatures.aggregate([
  // 新增字段提取温度数值和单位
  {
    $addFields: {
      temp_value: { $toDouble: { $substrCP: ["$avg_temperature", 0, { $subtract: [{ $strLenCP: "$avg_temperature" }, 1] }] } },
      temp_unit: { $substrCP: ["$avg_temperature", { $subtract: [{ $strLenCP: "$avg_temperature" }, 1] }, 1] }
    }
  },
  // 可选:统一转换为摄氏度(华氏转摄氏公式:(F-32)*5/9)
  {
    $addFields: {
      normalized_temp: {
        $cond: {
          if: { $eq: ["$temp_unit", "F"] },
          then: { $multiply: [{ $subtract: ["$temp_value", 32] }, 5/9] },
          else: "$temp_value"
        }
      }
    }
  },
  // 后续分组、转换对象逻辑同之前的查询
  {
    $group: {
      _id: "$date",
      tempEntries: {
        $push: {
          k: "$country",
          v: {
            original: "$avg_temperature",
            normalized: { $round: ["$normalized_temp", 1] }
          }
        }
      }
    }
  },
  {
    $project: {
      _id: 0,
      date: "$_id",
      avg_temperatures: { $arrayToObject: "$tempEntries" }
    }
  },
  { $sort: { date: 1 } }
])

这种处理方式能让可视化图表同时支持原始温度展示和数值对比,更灵活。

性能提示

当前数据量(数千条)下,该聚合查询性能足够;如果后续数据量增长到百万级,可以给date字段建立索引,进一步提升分组效率。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 01:35:26