본문 바로가기

개발/Flask, Fastapi

mongoengine NotUniqueError

    raise NotUniqueError(message % err)
mongoengine.errors.NotUniqueError: Tried to save duplicate unique keys 
(E11000 duplicate key error collection: frated.movie index: 
imdbid_1 dup key: { imdbid: null }, 

full error: {'index': 0, 'code': 11000, 'keyPattern': {'imdbid': 1}, 
'keyValue': {'imdbid': None}, 'errmsg': 'E11000 duplicate key error collection: 
frated.movie index: imdbid_1 dup key: { imdbid: null }'})

Postman을 사용해서 GET, PUT, POST 메소드를 써보는데 다음과 같은 에러가 났다.

또한 데이터베이스에는 900개 가량의 Documents가 있었는데 하나만 남고 나머지는 다 없어졌다.

왜 그런가 하니, Postman에서 테이블 이름을 만들 때 대문자까지 json이랑 같이 해야 오류가 안나서

다 대문자로 바꿔줬는데, 그러다보니 unique key 가 중복됐었다.

 

>> 3.29 추가 : json 파일의 key값과 동일하게 스키마를 만들면 오류가 나지 않습니다...

unique key 옵션은 안 넣어도 잘 동작하니 Document를 드랍하고 다시 해 보세요. 

 

+ 기존 테이블에서 여러 테이블에 unique key 속성을 넣었던 것도 문제의 원인인 듯 했다.

어차피 데이터를 넣을때 _id가 생성되니 

class Movie(db.Document):
    Title = db.StringField()
    Year = db.IntField()

() 부분에 unique key 속성을 다 제거했다.

 

그리고 몽고DB compass에서 테이블을 Drop하고 같은 이름으로 새로 생성했다.

그러니 데이터가 더이상 사라지지 않는다!