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

MongoDB聚合查询重复台词最多的场景(需输出剧名、幕、场)

莎士比亚戏剧数据集重复台词最多场景查询修正方案

原查询的核心偏差

原语句的统计逻辑完全偏离需求:直接对单条台词文本做全局计数,本质是统计整个数据集里相同文本台词的总出现次数,既没有绑定台词所属的场景信息,也没有按场景维度聚合重复值,自然拿不到对应剧名、幕号、场号的关联结果;同时逐层unwind过程没有保留场景、剧目本身的定位字段,后续统计完全丢失了上下文关联。

修正后的聚合执行逻辑

  • 逐层拆解嵌套结构,每一层拆解时同步保留对应的定位字段:剧目名称、幕的索引、场的索引
  • 先按「场景+具体台词文本」分组,统计同一场景内重复出现的台词次数
  • 过滤掉仅出现1次的非重复台词,再按场景维度汇总累计重复台词总条数
  • 按重复总条数降序排序,取排名第一的场景即为所求目标

可直接运行的修正查询

db.william.aggregate([
  // 拆解幕层级,保留幕的位置索引
  { $unwind: { path: "$acts", includeArrayIndex: "act_index" } },
  // 拆解场层级,保留场的位置索引
  { $unwind: { path: "$acts.scenes", includeArrayIndex: "scene_index" } },
  // 拆解场景下的动作段落
  { $unwind: "$acts.scenes.action" },
  // 拆解单条台词
  { $unwind: "$acts.scenes.action.says" },
  // 按场景+单条台词分组,统计场景内同台词的重复次数
  {
    $group: {
      _id: {
        play_name: "$name", // 数据集顶层存储的剧目名字段
        act_no: { $add: ["$act_index", 1] }, // 数组索引从0开始,转换为常规从1计数的幕号
        scene_no: { $add: ["$scene_index", 1] }, // 转换为常规从1计数的场号
        line_text: "$acts.scenes.action.says"
      },
      single_line_repeat: { $sum: 1 }
    }
  },
  // 过滤掉非重复的单次出现台词
  { $match: { single_line_repeat: { $gt: 1 } } },
  // 按场景汇总,统计单场景内所有重复台词的总条数
  {
    $group: {
      _id: {
        play_name: "$_id.play_name",
        act_no: "$_id.act_no",
        scene_no: "$_id.scene_no"
      },
      scene_total_repeat: { $sum: "$single_line_repeat" }
    }
  },
  // 按重复条数降序排序,取重复值最高的场景
  { $sort: { scene_total_repeat: -1 } },
  { $limit: 1 }
])

输出结果说明

返回条目会直接携带需求要求的全部定位信息:对应所属剧名、幕号、场号,同时附带该场景的累计重复台词总数值,完全匹配查询目标。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.26 10:27:04