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

Python 如何处理MongoDB(pyMongo)中的DuplicateKeyError?,python,mongodb,pymongo,database,Python,Mongodb,Pymongo,Database,有谁能告诉我如何在MongoDB中处理DuplicateKeyError 我正在编写一个python脚本,将两个不同集合中的几个文档移动到第三个集合中。由于有几个相同的文档(具有相同的ObjectId),两个集合之间有一个小的重叠。其结果如下: DuplicateKeyError:E11000重复密钥错误集合:admin.collection\u测试索引:id dup密钥:{:ObjectId('593a920b529e170d4b8fbf72')} 为了消除错误,我使用了: try:

有谁能告诉我如何在MongoDB中处理DuplicateKeyError

我正在编写一个python脚本,将两个不同集合中的几个文档移动到第三个集合中。由于有几个相同的文档(具有相同的ObjectId),两个集合之间有一个小的重叠。其结果如下:

DuplicateKeyError:E11000重复密钥错误集合:admin.collection\u测试索引:id dup密钥:{:ObjectId('593a920b529e170d4b8fbf72')}

为了消除错误,我使用了:

try:
    do something
except pymongo.errors.DuplicateKeyError:
    pass
我希望通过使用“try-except”将所有非交叉文档移动到第三个集合中,但是当第一个重叠(集合中已经存在的文档)出现时,脚本就会和平地停止运行。
非常感谢您的帮助

如果您正在迭代文档,请尝试使用
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
可以与upsert=True一起使用。如果文档已经存在,则会使用新文档更新文档,否则会创建新文档。

连接到数据库 创建数据库 创建集合 在集合中插入文档 为避免重复-如果不存在相同的ID,这将创建新文档
您的ObjectId已经存在于另一个文档的此集合中。根据原始帖子的代码示例,这应该是可接受的答案。
for doc in documents:
    client.update_one({'_id': doc['_id']}, doc, upsert=True)
connection = pymongo.MongoClient("192.168.2.202", 27017)
database = connection['my_database']
collection = database['my_collection']
url="http://some/api/url/path/?format=json"
data = {
    '_id': url,
    'timestamp': datetime.datetime.now(),
    'data': {
        'XX': 1,
        'YY': 2,
        'ZZ':  3
    }
}
collection.update_one({'_id': url},  {"$set": data}, upsert=True)