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

MongoDB聚合查询求助:筛选低出生率国家并按地区分组,找出出生率最低的地区

MongoDB聚合查询求助:筛选低出生率国家并按地区分组,找出出生率最低的地区

嘿,我来帮你看看这个问题!你现在的聚合查询逻辑有点偏差,所以没得到预期结果。咱们一步步调整:

首先,你原来的查询在$group阶段直接用$lt是不对的——$lt是比较运算符,应该先用来筛选数据,再进行分组统计。另外,你的需求是按**地区(Region)**分组,但你却把_id设成了Country,这也不符合目标。

下面是符合你需求的完整聚合查询:

db.data.aggregate([
  // 第一步:筛选出生率低于20的国家
  {
    $match: {
      Birthrate: { $lt: 20 }
    }
  },
  // 第二步:按地区分组,计算每个地区的最低出生率,同时可以附带该地区的国家列表
  {
    $group: {
      _id: "$Region",
      minBirthrate: { $min: "$Birthrate" },
      countries: { $push: "$Country" }
    }
  },
  // 第三步:按最低出生率升序排序,这样第一个结果就是出生率最低的地区
  {
    $sort: { minBirthrate: 1 }
  },
  // 第四步:如果只需要第一个(最低的)结果,可以加上这个阶段
  {
    $limit: 1
  }
])

咱们来拆解下每个阶段的作用:

  • $match:先把所有出生率低于20的文档筛选出来,减少后续分组的数据量,提升效率。
  • $group:按Region作为分组依据,用$min计算该地区的最低出生率,$push把该地区符合条件的国家都收集到一个列表里,方便你查看详情。
  • $sort:按计算出的minBirthrate从小到大排序,这样出生率最低的地区会排在最前面。
  • $limit:如果只需要最终的那个“出生率最低的地区”结果,加上这个阶段就能只返回第一条数据。

另外要注意:确保你的Birthrate字段是数字类型(从你给出的样本数据来看是数字),如果是字符串的话,需要先转成数字再比较,不然$lt的比较会有问题。

备注:内容来源于stack exchange,提问作者YOGENDRA SINGH

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.23 08:47:43