【问题标题】:pymongo insert only does not existpymongo insert only 不存在
【发布时间】:2019-06-20 03:51:46
【问题描述】:

我使用 InsertOne() 进行批量插入。

user1 = InsertOne({"user_id": 1})
user2 = InsertOne({"user_id": 2})
collection.bulk_write([user1, user2])

如果集合中已经存在user_id = 1,则会抛出batch op errors occurred 错误。

我想知道有没有什么方法只在数据不存在时才插入?

(无法使用获取数据并比较数据是否存在,因为我使用的是bulk_write

【问题讨论】:

    标签: mongodb pymongo


    【解决方案1】:

    您可以做的是:使用ReplaceOneupsert:true。这样如果文档已经存在更新不会有任何影响,如果它不存在,它会创建新的文档。

    试试这个:

    user1 = ReplaceOne({"user_id": 1},{"user_id": 1},upsert = True)
    user2 = ReplaceOne({"user_id": 2},{"user_id": 2},upsert = True)
    collection.bulk_write([user1, user2])
    

    确保在ReplaceOne 的第二个参数中传递所有需要存储在User 文档中的数据

    【讨论】:

    • 如果对您有用,请将其标记为正确答案,以便对可能面临相同/类似问题的其他人也有帮助。
    • upsert 用法是ReplaceOne({'w': 1}, {'z': 1}, upsert=True)。无论如何,谢谢:)
    • 哦,是的,我错误地将它与 javascript 语法混合在一起。我将编辑我的答案以反映正确的语法。
    • 我发现了问题。如果没有匹配的数据,则抛出pymongo.errors.BulkWriteError: batch op errors occurred 异常。但是我必须忽略它并重新进行。
    • 已解决。只需将ordered=False 添加到bulk_write()。执行完所有命令后会报错。
    猜你喜欢
    • 2020-11-25
    • 2016-08-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-12
    • 2018-12-10
    • 2023-01-31
    • 1970-01-01
    相关资源
    最近更新 更多