mongodb 컬렉션에 중복 문서 삽입을 중지하는 방법
한 잔 주세요.MongoDB
3개의 문서가 있는 컬렉션..
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
'IT' 카테고리의 다른 글
API를 사용하지 않고 MailChimp 관심 그룹 ID를 얻을 수 있습니까? (0) | 2023.03.04 |
---|---|
PHP에서 경고 잘못된 문자열 오프셋을 수정하는 방법 (0) | 2023.03.04 |
중첩된 JSON 개체 - 모든 작업에 어레이를 사용해야 합니까? (0) | 2023.03.04 |
리액트로 에이잭스 처리 (0) | 2023.03.04 |
쇼트 코드를 사용하여 워드프레스 투고의 페이지 제목을 콘텐츠에 포함시키는 방법 (0) | 2023.03.04 |