복붙노트

[MONGODB] MongoDB의 컬렉션 중복 문서의 삽입을 중지하는 방법

MONGODB

MongoDB의 컬렉션 중복 문서의 삽입을 중지하는 방법

우리는 세 가지 문서를 가지고 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. ==============================

    1.삽입 사용하지 마십시오.

    삽입 사용하지 마십시오.

    upsert로 사용 업데이트는 진정한 =. 당신은 어떤 문서가 쿼리와 일치하지 않는 경우 삽입 할 경우는 true : 업데이트 후 원하는 필드를 수정합니다 다음, 당신은 upsert을 말할 수, 쿼리와 일치하는 문서를 찾습니다.

    db.collection.update(
       <query>,
       <update>,
      {
        upsert: <boolean>,
         multi: <boolean>,
        writeConcern: <document>
       }
      )
    

    따라서, 귀하의 예를 들어, 다음과 같이 사용할 수 있습니다 :

    db.collection.update(doc, doc, {upsert:true})
    
  2. ==============================

    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. ==============================

    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입니다 좋습니다.

  4. from https://stackoverflow.com/questions/24122981/how-to-stop-insertion-of-duplicate-documents-in-a-mongodb-collection by cc-by-sa and MIT license