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

如何用PyMongo按名称查询文档并获取标签统计分析?

MongoDB按名称查询并统计标签的聚合实现

首先注意:你的文档里tags字段是逗号分隔的字符串(比如"tag1,tag2,tag3"),第一步得先把它拆成数组才能逐个统计。下面是完整的聚合管道操作:

db.collection.aggregate([
  // 1. 过滤出指定name的文档
  { $match: { name: "MyName" } },
  // 2. 把逗号分隔的tags字符串拆成数组
  { $addFields: { tagsArray: { $split: ["$tags", ","] } } },
  // 3. 将数组展开,每个标签单独成一条文档
  { $unwind: "$tagsArray" },
  // 4. 按标签分组,统计出现次数
  {
    $group: {
      _id: "$tagsArray",
      count: { $sum: 1 }
    }
  },
  // 5. 把分组结果转成{标签名: 数量}的格式
  {
    $group: {
      _id: null,
      tagStats: { $push: { k: "$_id", v: "$count" } }
    }
  },
  {
    $replaceRoot: { newRoot: { $arrayToObject: "$tagStats" } }
  }
])

各阶段说明:

  • $match:精准筛选出name为目标值的所有文档,减少后续处理的数据量
  • $addFields:用$split把tags字符串按逗号拆分,生成一个新的数组字段tagsArray
  • $unwind:把数组里的每个标签单独拆成一条文档,这样才能对每个标签做统计
  • 第一个$group:按标签内容分组,用$sum统计每个标签出现的总次数
  • 第二个$group:把所有标签的统计结果收集成一个数组,每个元素是包含k(标签名)和v(数量)的对象
  • $replaceRoot + $arrayToObject:把收集到的数组转成你需要的键值对格式,最终输出就是{tag1:7, tag2:5,...}这种结构

如果你的tags字段本来就是数组类型(不是逗号分隔的字符串),可以直接去掉$addFields阶段,把后面的$tagsArray换成$tags即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 05:35:29