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