[MONGODB] MongoDB의 컬렉션 중복 문서의 삽입을 중지하는 방법
MONGODBMongoDB의 컬렉션 중복 문서의 삽입을 중지하는 방법
우리는 세 가지 문서를 가지고 MongoDB를 수집 보자 ..
db.collection.find ()
{ _id:'...', user: 'A', title: 'Physics', Bank: 'Bank_A' }
{ _id:'...', user: 'A', title: 'Chemistry', Bank: 'Bank_B' }
{ _id:'...', user: 'B', title: 'Chemistry', Bank: 'Bank_A' }
우리는 문서를 가지고,
doc = { user: 'B', title: 'Chemistry', Bank:'Bank_A' }
우리가 사용하는 경우
db.collection.insert(doc)
여기,이 중복 된 문서는 데이터베이스에 삽입 얻을 것이다.
{ _id:'...', user: 'A', title: 'Physics', Bank: 'Bank_A' }
{ _id:'...', user: 'A', title: 'Chemistry', Bank: 'Bank_B' }
{ _id:'...', user: 'B', title: 'Chemistry', Bank: 'Bank_A' }
{ _id:'...', user: 'B', title: 'Chemistry', Bank: 'Bank_A' }
이 중복은 어떻게 중지 할 수 있습니다. 하는 필드는 인덱싱 완료 또는 다른 접근해야 하는가?
해결법
-
==============================
1.삽입 사용하지 마십시오.
삽입 사용하지 마십시오.
upsert로 사용 업데이트는 진정한 =. 당신은 어떤 문서가 쿼리와 일치하지 않는 경우 삽입 할 경우는 true : 업데이트 후 원하는 필드를 수정합니다 다음, 당신은 upsert을 말할 수, 쿼리와 일치하는 문서를 찾습니다.
db.collection.update( <query>, <update>, { upsert: <boolean>, multi: <boolean>, writeConcern: <document> } )
따라서, 귀하의 예를 들어, 다음과 같이 사용할 수 있습니다 :
db.collection.update(doc, doc, {upsert:true})
-
==============================
2.당신은 고유 MongoDB를 수집 내에서 문서를 식별하는 필드의 세트에 복합 인덱스를 사용해야합니다. 당신이 결정하는 경우 예를 들어, 사용자, 제목과 은행의 결합은 고유 키는 다음과 같은 명령을 실행 할 것을 :
당신은 고유 MongoDB를 수집 내에서 문서를 식별하는 필드의 세트에 복합 인덱스를 사용해야합니다. 당신이 결정하는 경우 예를 들어, 사용자, 제목과 은행의 결합은 고유 키는 다음과 같은 명령을 실행 할 것을 :
db.collection.createIndex( { user: 1, title: 1, Bank: 1 }, {unique:true} )
이전에 저장된 중복을 제거한 후이 작업을 수행해야 함을 유의하시기 바랍니다.
http://docs.mongodb.org/manual/tutorial/create-a-compound-index/
http://docs.mongodb.org/manual/tutorial/create-a-unique-index/
-
==============================
3.그것은 위의 답변에서 업데이트되었습니다.
그것은 위의 답변에서 업데이트되었습니다.
대신 db.collection.update의) db.collection.updateOne를 (사용하십시오 (). 대신 db.collection.ensureIndex의도 db.collection.createIndexes () ()
최신 정보: 방법 업데이트 ()와 ensureIndex ()가 MongoDB를 2 *에서 사용되지 않습니다, 당신은 몽고에서 자세한 내용을 볼 수 있으며 경로 ./mongodb/lib/collection.js입니다. 갱신 ()의 경우, 추천 방법은 updateOne, updateMany, 또는 bulkWrite 있습니다. ensureIndex ()의 경우,이 방법은 createIndexes입니다 좋습니다.
from https://stackoverflow.com/questions/24122981/how-to-stop-insertion-of-duplicate-documents-in-a-mongodb-collection by cc-by-sa and MIT license
'MONGODB' 카테고리의 다른 글
[MONGODB] 집계 쿼리에 MongoDB의 성능 (0) | 2019.12.14 |
---|---|
[MONGODB] MongoDB의 자바 드라이버 구성 로깅 (0) | 2019.12.14 |
[MONGODB] MongoDB의에서 가장 큰 문서 크기를 찾기 (0) | 2019.12.14 |
[MONGODB] 어떻게 기본 컬렉션과 데이터가있는 몽고 도커 이미지를 만드는 방법? (0) | 2019.12.14 |
[MONGODB] 오류 : GET 호출에 대한 nodejs에서한다 getaddrinfo의 ENOTFOUND (0) | 2019.12.14 |