首页 > 解决方案 > 将许多文档插入空集合中,如果 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_dataCODE

我正在使用 python 3.7、pymongo、mongodb 4.2.7。

标签: pythonpython-3.xmongodbpymongo

解决方案


您只需要将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)

推荐阅读