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

MongoDB聚合查询问题排查:筛选院校中女性医生

MongoDB聚合查询错误分析与修正

咱们来一步步拆解你遇到的问题,先看看你的聚合语句里的几个关键错误:

错误点梳理

  • $unwind 放置位置错误:$unwind是MongoDB聚合管道的独立阶段,你把它嵌套在了$match阶段里面,这完全不符合聚合管道的语法规则——每个阶段都得是数组里的单独对象。
  • 正则表达式逻辑搞反了:你的需求是筛选名字以字母"a"结尾的女性医生,但你用了{$not: /a$/},这会把所有以"a"结尾的名字都排除掉,正好和需求相反。
  • 数组处理顺序不对:在针对数组字段doktorzy里的子文档做筛选时,得先把数组拆分成单个文档(用$unwind),再进行匹配,不然没法精准定位到每个医生的名字。

修正后的聚合语句

下面是符合需求的正确聚合代码:

db.uczelnia.aggregate([
  // 第一步:将doktorzy数组拆分为单个医生文档
  { $unwind: "$doktorzy" },
  // 第二步:筛选出名字以"a"结尾的医生
  { $match: { "doktorzy.imie": /a$/ } },
  // 第三步:按医生名字分组,统计每个名字出现的次数
  { $group: { _id: "$doktorzy.imie", liczba_Pan: { $sum: 1 } } },
  // 第四步:按统计数量升序排序
  { $sort: { liczba_Pan: 1 } }
]);

各阶段作用说明

  1. $unwind:把每个院校文档里的doktorzy数组拆分成多条文档,每条文档对应一个医生,这样后续才能针对单个医生的信息做筛选和统计。
  2. $match:使用正则表达式/a$/匹配所有名字以"a"结尾的医生,完全贴合你的需求。
  3. $group:以医生的名字为分组依据,统计每个名字出现的次数(这里的liczba_Pan字段名可以根据实际需求调整,比如改成liczba_Doktorow会更准确)。
  4. $sort:按统计出来的数量做升序排序,和你原本的排序逻辑一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 03:43:28