如何处理MongoDB中的DuplicateKeyError(pyMongo)?

Vva*_*n_G 8 python database mongodb pymongo

有人可以告诉我如何在MongoDB中处理DuplicateKeyError吗?

我正在编写一个python脚本,我将几个文档从两个不同的集合移动到第三个.由于具有几个相同的文档(具有相同的ObjectId),两个集合之间存在小的重叠.这导致以下结果:

DuplicateKeyError:E11000重复键错误集合:admin.collection_test index:id dup key:{:ObjectId('593a920b529e170d4b8fbf72')}

为了摆脱我使用的错误:

try:
    do something
except pymongo.errors.DuplicateKeyError:
    pass
Run Code Online (Sandbox Code Playgroud)

我期望通过使用"try-except"将所有非交叉文档移动到第三个集合,但是一旦第一次重叠(集合中已经存在的文档)出现,脚本就会安静地停止运行.非常感谢任何帮助!

Joh*_*etz 9

如果您正在迭代文档,请尝试使用continue而不是pass.

for doc in documents:
    try:
        # insert into new collection
    except pymongo.errors.DuplicateKeyError:
        # skip document because it already exists in new collection
        continue
Run Code Online (Sandbox Code Playgroud)


dae*_*n24 5

for doc in documents:
    client.update_one({'_id': doc['_id']}, doc, upsert=True)
Run Code Online (Sandbox Code Playgroud)

您可以将update_one与upsert = True一起使用。如果doc已经存在,则会使用新doc更新doc,否则会创建新doc。