고유 키에도 불구하고 MongoDB 중복 문서
MongoDB에서 여러 필드에 고유 인덱스를 생성하면 해당 필드에 대해 동일한 값을 가진 중복 문서를 방지해야 합니다. 전지. 그러나 경우에 따라 색인을 추가한 후에도 중복된 문서가 계속 삽입될 수 있습니다.
문제:
"uid" 및 " sid" 필드가 컬렉션에 있지만 이러한 필드에 중복된 값이 있는 문서가 여전히 PHP 드라이버를 사용하여 삽입되었습니다.
해결책:
MongoDB Shell
기존 중복 문서 확인:
db.user_services.aggregate([ { "$group": { "_id": { "uid": "$uid", "sid": "$sid" }, "dups": { "$push": "$_id" }, "count": { "$sum": 1 } }}, { "$match": { "count": { "$gt": 1 } }} ])
중복 항목 제거:
db.user_services.remove({ "_id": {"$in": doc.dups }});
고유 인덱스 생성:
db.user_services.createIndex({"uid":1 , "sid": 1},{unique:true})
PHP
Upsert와 함께 업데이트 사용:
<code class="php">$collection->update( array( "uid" => 1, "sid" => 1 ), array( '$set' => $someData ), array( 'upsert' => true ) );</code>
여러 업데이트 처리:
<code class="php">$collection->update( array( "uid" => 1, "sid" => 1 ), array( '$set' => array( "field" => "this" ), '$inc' => array( "counter" => 1 ), '$setOnInsert' => array( "newField" => "another" ) ), array( "upsert" => true ) );</code>
위 내용은 고유 인덱스를 사용해도 MongoDB에 중복 문서가 표시되는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!