有人可以告诉我如何处理MongoDB中的 DuplicateKeyError 吗?
我正在编写一个python脚本,我将几个文档从两个不同的集合移动到第三个集合中。由于具有几个相同的文档(具有相同的ObjectId),两个集合之间存在小的重叠。这导致以下结果:
DuplicateKeyError:E11000重复键错误集合:admin.collection_test index: id dup key:{:ObjectId('593a920b529e170d4b8fbf72')}
为了摆脱我使用的错误:
try:
do something
except pymongo.errors.DuplicateKeyError:
pass
我希望通过使用“try-except”将所有非交叉文档移动到第三个集合,但是一旦第一次重叠(集合中已经存在的文档)出现,脚本就会安静地停止运行。 非常感谢任何帮助!
答案 0 :(得分:7)
如果您要对文档进行迭代,请尝试使用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
答案 1 :(得分:4)
for doc in documents:
client.update_one({'_id': doc['_id']}, doc, upsert=True)
您可以将update_one与upsert = True一起使用。如果doc已存在,则会使用新文档更新doc,否则会创建新文档。
答案 2 :(得分:-1)
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)