문제 설명
" uid" 및 "sid" 필드, 중복 문서가 여전히 컬렉션에 삽입되고 있습니다.
기술 세부 정보
사용된 인덱스 생성 명령:
db.user_services.createIndex({"uid":1 , "sid": 1},{unique:true,dropDups: true})
원인
컬렉션에 중복된 문서가 있어 인덱스 생성에 실패합니다. MongoDB 버전 3.0.0에서는 "dropDups" 옵션이 올바르게 작동하지 않아 이 문제가 발생합니다.
해결 방법
db.events.aggregate([ { "$group": { "_id": { "uid": "$uid", "sid": "$sid" }, "dups": { "$push": "$_id" }, "count": { "$sum": 1 } }}, { "$match": { "count": { "$gt": 1 } }} ]).forEach(function(doc) { doc.dups.shift(); db.events.remove({ "_id": {"$in": doc.dups }}); });
db.events.createIndex({"uid":1 , "sid": 1},{unique:true})
Upsert 작업
질문의 두 번째 부분에서는 기존 데이터의 존재를 기반으로 문서를 삽입하거나 업데이트하는 원하는 동작을 달성하기 위해 , "upsert" 옵션과 함께 ".update()" 메서드를 사용하세요.
$collection->update( array( "uid" => 1, "sid" => 1 ), array( '$set' => $someData ), array( 'upsert' => true ) );
이렇게 하면 발견된 문서가 수정되고 필요에 따라 새 문서가 삽입됩니다. 또한 "$setOnInsert"를 사용하여 문서 삽입 중에만 설정해야 하는 필드를 지정할 수 있습니다.
위 내용은 'dropDups'를 사용하여 고유 키를 생성한 후에도 MongoDB 컬렉션에 중복 문서가 나타나는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!