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
相关产品推荐
相关产品推荐

