如何高效获取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
相关产品推荐
相关产品推荐

