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

如何高效获取MongoDB数组字段的唯一k1值及关联k2值?

需求与问题

我的MongoDB集合结构如下:

[
  {
    "_id": xxx,
    "field": {
      "subfield": [
        {
          "k1": "a",
          "k2": "b",
          ...
        },
        {
          "k1": "a",
          "k2": "b",
          ...
        },
        {
          "k1": "c",
          "k2": "d",
        },
        ...
      ]
    },
    "kn": "z",
    ...
  }
]

其中subfield数组内的k1与k2一一对应,比如k1为a时k2必然是b。我需要完成两个目标:

  • 获取k1的唯一值及其总出现次数
  • 获取每个唯一k1对应的唯一k2值

但由于文档总量和数组长度过大,使用$unwind会导致进程崩溃或超出对象大小限制。

目前我已通过PyMongo实现第一个目标(统计k1的出现次数),代码如下:

from collections import Counter
from pymongo import MongoClient


db = MongoClient(...).get_database(...).get_collection(...)

query = [
   {"$match": {"kn": "z"}},
   {"$group": {"_id": "$field.subfield.k1", "count": {"$sum": 1}}}
]
results = list(db.aggregate(query))  # 返回结果中,_id是包含k1值的数组
results = [d["_id"] * d["count"] for d in results]  # 展开数组以统计每个k1的总次数
results = [element for sublist in results for element in sublist]
results = Counter(results)

现在需要高效获取每个k1对应的唯一k2值,使用find_one逐个查询耗时过长,寻求解决方案。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 01:30:58