如何使用 MongoDB(使用 PyMongo)进行批量插入,即使其中一条记录失败?

How can I bulk insert with MongoDB (using PyMongo), even when one record of the bulk fails?

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

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

问题来了:当代码去批量插入一组1000个对象,并且一个对象有一个之前插入过的data_id,整个insert for all 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() 无序插入对象列表,以便仅非唯一记录失败而其余记录按预期插入?

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