使用Pymongo的aggregate与MongoDB的$project提取字典键值到父字典
解决方案
方案1:修改MongoDB聚合语句(推荐)
直接在数据库查询阶段完成字段提权,无需额外做后处理,修改后的代码如下:
cursor_processes = collection.aggregate([ # 统一字段大小写,解决部分文档使用大写开头Processes不生效的问题 { '$addFields': { 'processes': { '$ifNull': ['$processes', '$Processes'] } } }, { '$unwind': "$processes" }, # 合并_id与processes内的字段作为新的根文档 { '$replaceRoot': { 'newRoot': { '$mergeObjects': [ { '_id': '$_id' }, '$processes' ] } } } ]) results = list(cursor_processes)
方案2:Python层面处理返回结果
如果不想修改聚合逻辑,也可以拿到查询结果后手动重构字段结构,代码如下:
cursor_processes = collection.aggregate([ { '$unwind':"$processes" }, { '$project': { "_id": 1, "processes": 1 } } ]) results = [] for item in cursor_processes: res_item = {'_id': item['_id']} res_item.update(item['processes']) results.append(res_item)
内容的提问来源于stack exchange,提问作者Angel Rivas Hidalgo
相关产品推荐
相关产品推荐

