Using update_one to update nested dictionary in pymongo (python mongoDB)(使用update_one更新pymongo中的嵌套字典(Python MongoDB))
本文介绍了使用update_one更新pymongo中的嵌套字典(Python MongoDB)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
假设我有以下函数:
def insert_data(self, data, id):
self.snapshots.update_one({'snapshot_id': id},
{'$set': {'topic': data}}, upsert=True)
数据始终是具有单个条目(一个键-值对)的字典。 每次调用此函数时,"data"持有不同的密钥。 我希望每个调用都将该键-值对添加到"Theme"下。
假设数据在第一次调用时为{1:2},在第二次调用时为{3:4}。 我想在两次通话后有{‘Theme’:{1:2,3:4}}。 我怎样才能做到这一点呢?上面的函数覆盖了数据字典,因此只保留最后一个(在这种情况下,我以{‘Theme’:{3:4}}结束)。它一定没有那么复杂,但我无法使其正常工作。
推荐答案
从MongoDB4.2版本开始,您可以使用Updates with Aggregation Pipeline新功能来获得您想要的结果。
只需用括号[]
将更新括起来,就可以让mongo使用聚合并实际更新文档。
尝试这样的操作:
print(f'Document before update')
pprint.pprint(coll.find_one())
def insert_data(data, id):
for key, value in data.items():
coll.update_one({'snapshot_id': id},
[{'$set': {'topic': {str(key): value}}}])
data_dict = {1: 6, 3: 8, 5: 6}
for k, v in data_dict.items():
insert_data({k: v}, 'Demo1')
print(f'
Document after update')
pprint.pprint(coll.find_one())
结果:
Document before update
{'_id': ObjectId('5e799063caf64cd83bfda524'), 'snapshot_id': 'Demo1'}
Document after update
{'_id': ObjectId('5e799063caf64cd83bfda524'),
'snapshot_id': 'Demo1',
'topic': {'1': 6}}
Document after update
{'_id': ObjectId('5e799063caf64cd83bfda524'),
'snapshot_id': 'Demo1',
'topic': {'1': 6, '3': 8}}
Document after update
{'_id': ObjectId('5e799063caf64cd83bfda524'),
'snapshot_id': 'Demo1',
'topic': {'1': 6, '3': 8, '5': 6}}
这篇关于使用update_one更新pymongo中的嵌套字典(Python MongoDB)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
沃梦达教程
本文标题为:使用update_one更新pymongo中的嵌套字典(Python MongoDB)
基础教程推荐
猜你喜欢
- 症状类型错误:无法确定关系的真值 2022-01-01
- 将 YAML 文件转换为 python dict 2022-01-01
- 如何在 Python 中检测文件是否为二进制(非文本)文 2022-01-01
- 使 Python 脚本在 Windows 上运行而不指定“.py";延期 2022-01-01
- 如何在Python中绘制多元函数? 2022-01-01
- 使用 Google App Engine (Python) 将文件上传到 Google Cloud Storage 2022-01-01
- Python 的 List 是如何实现的? 2022-01-01
- 合并具有多索引的两个数据帧 2022-01-01
- 使用Python匹配Stata加权xtil命令的确定方法? 2022-01-01
- 哪些 Python 包提供独立的事件系统? 2022-01-01