将许多文档插入空集合,如果mongodb中已经存在具有相同键的文档,则进行更新

问题描述 投票:0回答:1

我有此词典列表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。

python python-3.x mongodb pymongo
1个回答
2
投票

您只需要将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(request)
© www.soinside.com 2019 - 2024. All rights reserved.