IT

mongodb 컬렉션에 중복 문서 삽입을 중지하는 방법

itgroup 2023. 3. 4. 14:45
반응형

mongodb 컬렉션에 중복 문서 삽입을 중지하는 방법

한 잔 주세요.MongoDB3개의 문서가 있는 컬렉션..

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' }

이 복제를 중지하는 방법.인덱싱은 어느 필드에서 수행해야 합니까, 아니면 다른 접근 방식을 사용해야 합니까?

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

와 함께 업데이트를 사용합니다. 업데이트는 쿼리와 일치하는 문서를 검색한 후 원하는 필드를 수정한 다음 업퍼트를 알릴 수 있습니다.질의와 일치하는 문서가 없는 경우 삽입하려는 경우 True입니다.

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

예를 들어 다음과 같은 것을 사용할 수 있습니다.

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

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/

상기 답변에서 갱신되었습니다.

사용하세요db.collection.updateOne()대신db.collection.update()그리고 또.db.collection.createIndexes()대신db.collection.ensureIndex()

업데이트: 메서드 update() 및 확인인덱스()는 mongodb 2.*에서 폐지되었습니다.mongo에서 자세한 내용을 볼 수 있으며 경로는 다음과 같습니다../mongodb/lib/collection.js.위해서update()권장되는 방법은 다음과 같습니다.updateOne, updateMany, or bulkWrite.위해서ensureIndex()권장 방법은 다음과 같습니다.createIndexes.

다른 방법보다 조금 느릴 수도 있지만 작동도 합니다.루프 내에서 사용할 수 있습니다.

db.collection.replaceOne(query, data, {upsert: true})

쿼리는 다음과 같습니다.

{ _id: '5f915390950f276680720b57' }

https://docs.mongodb.com/manual/reference/method/db.collection.replaceOne

당신이 찾고 있는 것은AddToSet대신Push또는Insert. 사용방법Upsert플래그가 나한테는 안 맞는 것 같아

즉,var updateSet = Builders<T>.Update.AddToSet(collectionField, value);

주의:AddToSet값을 비교하고 있는 것 같습니다.

문서의 _id 키를 고유 식별자로 설정하고 collection.insert_many(collection, ordered=False)를 사용하면 대량 삽입과 중복 방지를 동시에 수행할 수 있습니다.

예:

문서 = [{'_id':'hello', {'_id':'world', {'_id':'hello'}]

collection.insert_many(오더, 오더=False)

ordered=False는 중요합니다.서류상으로는 주문하신 경우=true 그러면 중복된 _id가 발견되면 mongo는 삽입 시도를 중지합니다.order=False일 경우 mongo는 모든 문서를 삽입하려고 합니다.

언급URL : https://stackoverflow.com/questions/24122981/how-to-stop-insertion-of-duplicate-documents-in-a-mongodb-collection

반응형