【问题标题】:Bulk upsert not working pymongo批量 upsert 不起作用 pymongo
【发布时间】:2017-03-20 18:24:00
【问题描述】:

我正在尝试更新文档(如果存在),如果集合中不存在则插入。我将 pandas 数据框记录作为文档插入到基于 _id 的集合中。新文档的插入工作正常,但旧文档中的字段更新不起作用。

bulk = pymongo.bulk.BulkOperationBuilder(pros_rides,ordered=False)
for doc in bookings_df:
    bulk.find({ "_id": doc["_id"] }).upsert().update({
        "$setOnInsert": doc
    })
response = bulk.execute()

我错过了什么?

【问题讨论】:

  • 你说的不工作是什么意思?
  • @Styvane 在进行 upsert 时,当新记录到来时它会插入,但是当旧记录到来时,文档没有得到更新。

标签: python mongodb mongodb-query pymongo


【解决方案1】:

一个 upsert 可以更新或插入一个文档; "$setOnInsert" 操作仅在文档插入时执行,在文档更新时执行。为了更新文档(如果存在),您必须提供一些将在文档更新时执行的操作。

试试这样的方法:

bulk = pros_rides.initialize_unordered_bulk_op()
for doc in books_df:
    bulk.find({'_id': doc['_id']}).upsert().replace_one(doc)

bulk.execute()

【讨论】:

  • @Deepak selva,注意 Bulk() 及其在 MongoDB 3.2 中的相关方法已被弃用,它提供了 bulk_write() 方法
  • @Deepak-selva 还有什么我可以帮助你的吗,或者你会接受这个答案是正确的吗?
猜你喜欢
  • 2015-05-16
  • 1970-01-01
  • 2014-07-17
  • 2017-08-23
  • 2017-04-27
  • 2021-01-07
  • 1970-01-01
  • 1970-01-01
  • 2021-01-26
相关资源
最近更新 更多