【问题标题】:How can I bulk insert with MongoDB (using PyMongo), even when one record of the bulk fails?即使批量记录失败,如何使用 MongoDB(使用 PyMongo)批量插入?
【发布时间】:2015-11-09 18:08:51
【问题描述】:

我有一些 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() 无序插入对象列表,以便只有非唯一记录失败,其余记录按预期插入?

【问题讨论】:

    标签: python mongodb pymongo bulkinsert


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-07-12
      • 2013-04-25
      • 1970-01-01
      • 1970-01-01
      • 2016-04-19
      • 1970-01-01
      • 1970-01-01
      • 2019-05-10
      相关资源
      最近更新 更多