gpt4 book ai didi

python - 将 mongodb 中的嵌套集合与从并行节点写入的文档相结合

转载 作者:行者123 更新时间:2023-12-01 04:55:57 25 4
gpt4 key购买 nike

我正在考虑是否可以使用 MongoDB 来帮助解决我们的存储和处理问题。这个想法是,计算将以多处理的方式在每个节点上完成,并使用唯一的 mongodb ObjectId 写入 mongodb。字典中的数据结构如下:

{a: {b: {c: [100, 200, 300]} }

a、b 和 c 是整数键

当计算完成并将所有记录写入 mongo 时,必须组合文档,以便我们按顶级 a、b、c 进行分组。因此两个文档可能包含(示例 A):

文档1:{24:{67:{12:[100, 200]}}}

文档2:{24:{68:{12:[100, 200]}}}

那么如果我们合并:

组合:{24: {67: {12: [100, 200]}, 68: [100, 200]}}

如果我们还有另外几个文档(ExampleB):

文档1:{24:{67:{12:[100, 200]}}}

文档2:{24:{67:{12:[300, 400]}}}

组合:{24: {67: {12: [100, 200, 300, 400]}}}

组合这些嵌套结构的最佳方法是什么?我可以手动遍历每个文档并在 python 中执行此操作,但是有更智能的方法吗?我需要保留底层数据结构。

最佳答案

使用 python 进行聚合有什么不明智的地方?考虑以下函数:

def aggregate(documents, base_document=None, unique=True):
# use unique=False to keep all values in the lists, even if repeated
# like [100, 100, 200, 300], leave it True otherwise
for doc in documents:
if isinstance(doc, list):
if base_document is None: base_document = []
for d in doc:
base_document.append(d)
if unique==True: base_document = set(base_document)
base_document = sorted(base_document)
else:
if base_document is None: base_document = {}
for d in doc:
b = base_document[d] if d in base_document \
else [] if isinstance(doc[d], list) else {}
base_document[d] = aggregate([doc[d]], base_document=b)
return base_document

使用以下一组文档进行测试,它生成聚合:

documents = [   {20: {55: { 7: [100, 200]}}},
{20: {68: {12: [100, 200]}}},
{20: {68: {12: [500, 200]}}},
{23: {67: {12: [100, 200]}}},
{23: {68: {12: [100, 200]}}},
{24: {67: {12: [300, 400]}}},
{24: {67: {12: [100, 200]}}},
{24: {67: {12: [100, 200]}}},
{24: {67: {12: [300, 500]}}},
{24: {67: {13: [600, 400]}}},
{24: {67: {13: [700, 900]}}},
{24: {68: {12: [100, 200]}}},
{25: {67: {12: [100, 200]}}},
{25: {67: {12: [300, 400]}}}, ]

from pprint import pprint
pprint(aggregate(documents))

'''
{20: {55: {7: [100, 200]}, 68: {12: [100, 200, 500]}},
23: {67: {12: [100, 200]}, 68: {12: [100, 200]}},
24: {67: {12: [100, 200, 300, 400, 500], 13: [400, 600, 700, 900]},
68: {12: [100, 200]}},
25: {67: {12: [100, 200, 300, 400]}}}
'''

关于python - 将 mongodb 中的嵌套集合与从并行节点写入的文档相结合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27384300/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com