更新_one()中的pymongo中出现重复密钥错误

2024-03-29 12:59:58 发布

您现在位置:Python中文网/ 问答频道 /正文

这里我使用pymongo的update_one(),upsert=True

预期的结果是,如果条目已经存在,它应该合并。 但此命令会导致重复密钥错误。 逻辑上,“uniqueId”和“_id”是主键。但是我没有手动设置任何东西,所以只有_id是

db.alerts.update_one({"uniqueId":doc['uniqueId']},{"$set":doc,"$max":statusDict,"$min":{"_id":newId}},upsert=True)

错误:

E11000 duplicate key error collection: alerts.alerts index: _id_ dup key: { _id: "336" }

更新_one()时不需要这样做,对吗

该案例的简化示例

from pymongo import MongoClient

db = MongoClient()

collection = db.tests.tests
collection.insert_one({"name":"tom","unique":1,"_id":1})
collection.update_one({"unique":1},{"$set":{"name":"jerry"},"$min":{"_id":0}})

这将生成错误_id字段

pymongo.errors.WriteError: Performing an update on the path '_id' would modify the immutable field '_id'

Tags: keyidtruedbdoc错误updatemin
1条回答
网友
1楼 · 发布于 2024-03-29 12:59:58

在update_one中,我们可以更改或添加除主键以外的属性,主键由dafault'_id'指定

在我的案例中,我用_id和uniqueId交换了用法。代码起作用了

对于简单的示例,只需将两者都替换为do

collection.update_one({"_id":1},{"$set":{"name":"jerry"},"$min":{"unique":0}})

您必须在语义上更改使用这两个字段。或者您可以更改默认主键

相关问题 更多 >