python - 将许多文档插入空集合中,如果 mongodb 已经存在具有相同键的文档,则更新
问题描述
我有这个字典列表json_data
json_data = [
{
"CODE": "018906",
"X": "29813.66349",
"Y": "28697.520760000003"
},
{
"CODE": "018907",
"X": "30041.8389",
"Y": "28602.98724"
},
{
"CODE": "018910",
"X": "31966.120789999997",
"Y": "29115.75337"
},
]
我有这个 mongodb 集合code_col
。我想在集合为空时插入json_data
集合。下次code_col
可能会有一个新的,如果密钥相同,则应该更新文档而不是插入文档。json_data
CODE
我正在使用 python 3.7、pymongo、mongodb 4.2.7。
解决方案
您只需要将upsert
标志设置为True
.
for j in json_data:
db.code_col.update_one({'CODE': j['CODE']},
{'$set': {'X': j['X'], 'Y': j['Y']}},
upsert=True)
更新:通过使用bulk_write
方法,我们可以在一定程度上减少此操作的时间。
from pymongo import UpdateOne
requests = []
for j in json_data:
requests.append(UpdateOne({'CODE': j['CODE']},
{'$set': {'X': j['X'], 'Y': j['Y']}},
upsert=True))
db.code_col.bulk_write(requests)
推荐阅读
- python - Python evdev 库是否具有特定于事件的抓取或直通?
- python - 如何在熊猫中使用 groupby 或 pivot_table
- java - 一种使用 Java 中的堆栈返回新的反向单链表的方法,保留相同的元素但以相反的顺序打印出来
- javascript - 是否有可能在不使用加载调用的情况下将表单绑定到模式引导窗口?
- wagtail - 我可以在 Wagtail 中使用递归 ParentalKey 吗?
- python - 如何让我的机器人将发送给它的 DM 转发到频道
- arrays - 如何在文本文件中存储多个数组(向量)作为列而不是行
- laravel - 在 docker 上运行的 mongodb 无法在 robo 3t 上进行身份验证
- php - 我对 MySQL 中的输出有疑问
- wordpress - 需要帮助 wordpress 中的类别帖子布局