如果我的数据库如下所示:
/ * 1 * / {“ _id”:1.0,“ imagename”:“ pen1”,“数量”:21.0}
/ * 2 * / {“ _id”:2.0,“ imagename”:“ pen”,“数量”:20.0}
/ * 3 * / {“ _id”:3.0,“ imagename”:“橡皮擦”,“数量”:25.0}
并且我必须插入包含重复密钥的以下文档,通常我必须跳过它,可以通过continue_on_error = True完成,但不起作用
db.products.insert(
[{ _id:1,imagename: "pen1", qty: 21 },
{ _id:2,imagename: "pen", qty: 20 },
{ _id:3,imagename: "eraser", qty: 25 }]
)
使用insert_many得到batch op errors occurred
使用insert_many(data,ordered = False)面临相同的问题batch op errors occurred
使用插入获取duplicate key error collection
使用insert(data,continue_on_error = True)得到相同的问题duplicate key error collection
using : pymongo Version: 3.9.0,
MongoDB shell version v3.6.3
insert()
已弃用,因此不应使用。因此continue_on_error
不再是一回事。
将insert_many()
与ordered=False
参数一起使用,并将命令包装在try...except
中以忽略任何重复的键错误。任何重复的条目将被跳过,并且将插入任何新记录。试试这个例子:
from pymongo import MongoClient
from pymongo.errors import BulkWriteError
db = MongoClient()['mydatabase']
try:
db.products.insert_many(
[{ '_id': 1 ,'imagename': 'pen1', 'qty': 21 },
{ '_id': 2 ,'imagename': 'pen', 'qty': 20 },
{ '_id': 3 ,'imagename': 'eraser', 'qty': 25 }], ordered=False)
except BulkWriteError as e:
pass