在mongo中插入多个文档会忽略键是否存在continue_on_error =真的不起作用

问题描述 投票:0回答:1

如果我的数据库如下所示:

/ * 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
python mongodb mongodb-query pymongo
1个回答
0
投票

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
© www.soinside.com 2019 - 2024. All rights reserved.