繁体   English   中英

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

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

我有一些Python代码,使用PyMongo将许多列表(每个列表包含1000个对象)插入具有唯一索引(字段名称为data_id )的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()无序插入对象列表,以便仅非唯一记录失败,其余部分按预期插入?

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM