Python MongoDB保存集合字典



我有一个集合字典,我想将其永久保存在mongodb数据库中。然而,我收到错误";无法对类型为<的对象{1,2}进行编码;类"set">quot;在保存过程中。我看到一篇帖子,其中一位用户建议将每个集合保存为dict,但这对我来说似乎不是一个好的解决方案。除了将每个集合转换为列表之外,还有其他方法可以将字典与集合一起保存吗?该字典看起来像下面的代码,但更复杂,包含数千个带有字符串键和set((值的条目:

{'One': {1, 2}, 'Two': {3, 4}, 'Three': {5, 6}}

MongoDB曾经使用SONManipulator来转换进出数据库的文档,但在4.0中已被弃用。因此,您必须将set预处理为对象,以便在加载时保存和恢复它们。

示例:

test = {'One': {1, 2}, 'Two': {3, 4}, 'Three': {5, 6}}
def unsetify(doc):
for k, v in doc.items():
if isinstance(v, dict):
doc[k] = unsetify(v)
elif isinstance(v, set):
doc[k] = { '_type': 'set', '_val': list(v) }
return doc

def resetify(doc):
for k, v in doc.items():
if isinstance(v, dict):
if v.get('_type', '') == 'set':
doc[k] = set(v['_val'])
else:
doc[k] = resetify(v)
return doc
doc = unsetify(test)
print(doc)
print(resetify(doc))

输出:

{'One': {'_type': 'set', '_val': [1, 2]}, 'Two': {'_type': 'set', '_val': [3, 4]}, 'Three': {'_type': 'set', '_val': [5, 6]}}
{'One': {1, 2}, 'Two': {3, 4}, 'Three': {5, 6}}

是的,这是递归的,是的,它会把输入文档打在原地,而不是复制等。对于确切的用例来说可能不理想(不能说没有更多信息(,但它展示了原理。

最新更新