如何批量插入MongoDB(使用PyMongo),即使批量的一个记录失败?

时间:2015-11-09 18:08:51

标签: python mongodb pymongo bulkinsert

我有一些 Python 代码,它使用PyMongo将许多列表(每个1000个对象)插入到具有唯一索引的集合中(字段名称为data_id) 。

但是,我的一些对象列表在要插入的不同列表集中有重复数据(例如,也许第二个1000个对象列表中有一个或两个记录与某些列表相同先前插入第一组批量插入物中的物体的数量)。

问题:当代码批量插入一组1000个对象,而一个对象先前插入data_id时,整个插入所有1000个对象失败。我正在执行如下插入:

inserted = False
try:
    collection = self.db[self.database][self.collection]
    collection.insert(record)
    inserted = True

except pymongo.errors.ConnectionFailure, e:
    sys.stdout.write('Error connecting to %s: %s\n' % (self.connection_url, e))
except BaseException, e:
    sys.stdout.write('An error occurred in add_record: %s\n' % e)

return inserted

我已经在某处读过(现在我无法在任何地方找到参考!),这可以通过告诉Mongo列表无序来避免。所以我尝试传递插入行ordered=False,但这失败了:

__init__() got an unexpected keyword argument 'ordered'

有没有人知道如何使用PyMongo.insert()无序插入对象列表,以便只有非唯一记录失败,其余的按预期插入?

1 个答案:

答案 0 :(得分:1)

找到答案。对于有兴趣的人,.insert()已弃用PyMongo,建议使用.insert_many(),其中尊重ordered=False关键字。