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

如何基于现有NoSQL数据格式编写MongoDB查询获取所需统计数据

MongoDB聚合查询实现方案

你提出的两个统计需求均可通过MongoDB聚合管道实现,对应查询语句如下:

需求1:2021年9月usedCar类别按theNumberOfSold排序列表

db.collection.aggregate([
  // 筛选符合品类和时间范围的文档
  {
    $match: {
      Category: "usedCar",
      date: {
        $gte: ISODate("2021-08-31T15:00:00Z"), // 适配东9区,对应2021-09-01 00:00:00
        $lt: ISODate("2021-09-30T15:00:00Z") // 适配东9区,对应2021-10-01 00:00:00
      }
    }
  },
  // 展开Data数组为单条文档
  { $unwind: "$Data" },
  // 按汽车名称分组,统计指定时间段内总销量
  {
    $group: {
      _id: "$Data.name",
      totalSold: { $sum: "$Data.theNumberOfSold" }
    }
  },
  // 按销量降序排序,如需升序可将参数改为1
  { $sort: { totalSold: -1 } },
  // 调整输出字段格式,可根据需求调整
  {
    $project: {
      _id: 0,
      name: "$_id",
      theNumberOfSold: "$totalSold"
    }
  }
])

需求2:2021年1月~7月newCar类别按theNumberOfSold排序列表

db.collection.aggregate([
  {
    $match: {
      Category: "newCar",
      date: {
        $gte: ISODate("2020-12-31T15:00:00Z"), // 适配东9区,对应2021-01-01 00:00:00
        $lt: ISODate("2021-07-31T15:00:00Z") // 适配东9区,对应2021-08-01 00:00:00
      }
    }
  },
  { $unwind: "$Data" },
  {
    $group: {
      _id: "$Data.name",
      totalSold: { $sum: "$Data.theNumberOfSold" }
    }
  },
  { $sort: { totalSold: -1 } },
  {
    $project: {
      _id: 0,
      name: "$_id",
      theNumberOfSold: "$totalSold"
    }
  }
])

注意:如果你的date字段存储为字符串格式而非ISODate类型,需要在$match阶段前新增{ $addFields: { date: { $toDate: "$date" } } }将字段转换为日期类型再做范围过滤。

内容的提问来源于stack exchange,提问作者grit-ki

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 01:45:02