gpt4 book ai didi

mongodb不可能(?)E11000重复键错误dup key当upserting

转载 作者:IT老高 更新时间:2023-10-28 13:05:11 25 4
gpt4 key购买 nike

我的理解是,在单个文档上使用 upsert:true 进行更新是一个原子操作,因此当集合没有唯一索引字段时,这绝不会导致重复键错误,尤其是在主 _id 键上:

Order.update({ _id: order._id }, query, { upsert: true }, cb) // with mongoose

但这出现在 mongod.log 中:

    2015-03-27T09:39:10.349-0400 I WRITE    [conn258236] update xyz.orders 
query: { _id: "6353f880-c6a7-4260-809f-98e0af27b9a2" } update: { $set: { ...
} keyUpdates:0 writeConflicts:0 **exception: E11000 duplicate key error dup
key: { : "6353f880-c6a7-4260-809f-98e0af27b9a2" } code:11000** numYields:1
locks:{} 138ms


2015-03-27T09:39:10.349-0400 I COMMAND [conn258236] command xyz.$cmd
command: update { update: "orders", writeConcern: { w: 1 }, ordered: true,
updates: [ { q: { _id: "6353f880-c6a7-4260-809f-98e0af27b9a2" }, u: { $set: {
... } }, multi: false, upsert: true } ] } keyUpdates:0 writeConflicts:0
numYields:0 reslen:235 locks:{} 139ms

这是 db.orders.getIndexes() 的输出:

{
"v" : 1,
"key" : {
"_id" : 1
},
"name" : "_id_",
"ns" : "xyz.orders"
},

我们正在使用带有 WiredTiger 的 MongoDB 3.0.0 版。

最佳答案

恐怕这是一个持续存在的问题。我遇到了同样的问题,我找到了一张关于这个的 jira 票:

https://jira.mongodb.org/browse/SERVER-14322

It is possible that two updates come in with upsert:true, resulting in neither finding a document and both inserting new documents which conflict on unique index violations of the query predicate.

这里的“解决方案”是在客户端中添加重试代码。

关于mongodb不可能(?)E11000重复键错误dup key当upserting,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29305405/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com