programing

mongodb 불가능(?)을(를) 해제할 때 E11000 중복 키 오류 dup 키

powerit 2023. 6. 27. 22:36
반응형

mongodb 불가능(?)을(를) 해제할 때 E11000 중복 키 오류 dup 키

제가 알기로는 단일 문서에서 upsert:true를 사용한 업데이트는 원자적 작업이므로 컬렉션에 고유하게 인덱스된 필드가 없을 때 특히 primary_id 키가 아닌 중복 키 오류가 발생하지 않습니다.

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

하지만 이것은 몽고드에 나타납니다.로그:

    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"
},

우리는 Wired Tiger와 함께 MongoDB 버전 3.0.0을 사용하고 있습니다.

유감스럽게도 이것은 진행 중인 문제입니다.저도 같은 문제가 있었고 이것에 대한 jira 티켓을 찾았습니다.

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

true라는 두 가지 업데이트가 업데이트되어 문서를 찾지 못하고 쿼리 술어의 고유한 인덱스 위반과 충돌하는 새 문서를 삽입할 수 있습니다.

여기서 "해결책"은 클라이언트에 재시도 코드를 추가하는 것입니다.

언급URL : https://stackoverflow.com/questions/29305405/mongodb-impossible-e11000-duplicate-key-error-dup-key-when-upserting

반응형