>  기사  >  백엔드 개발  >  고유 키 추가 후 MongoDB에서 중복 문서를 방지하는 방법은 무엇입니까?

고유 키 추가 후 MongoDB에서 중복 문서를 방지하는 방법은 무엇입니까?

Susan Sarandon
Susan Sarandon원래의
2024-10-30 11:10:00246검색

How to Prevent Duplicate Documents in MongoDB After Unique Key Addition?

고유 키 추가 후 MongoDB에서 중복 문서 방지

uid 및 sid 필드에 고유 인덱스를 추가했음에도 불구하고(db.user_services.createIndex ({"uid":1 , "sid": 1},{unique:true,dropDups: true})), MongoDB 3.0.0의 제한으로 인해 중복 문서가 계속 삽입될 수 있습니다.

기존 중복을 제거하려면 사용자 정의 절차를 사용할 수 있습니다.

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

이 절차는 중복을 제거하여 고유 인덱스가 의도한 대로 생성되도록 합니다.

MySQL의 "ON DUPLICATE KEY" 에뮬레이션 " 동작

PHP를 사용하여 중복 키 업데이트 속도=속도 1에서 MySQL의 삽입(값) 동작을 달성하려면 upsert 옵션이 있는 update() 메서드를 사용할 수 있습니다.

<code class="php">$collection->update(
    ["uid" => 1, "sid" => 1],
    [
        '$set' => [
            "field" => "this",
            "counter" => 1  // Incrementing the "counter" field by 1
        ],
        '$setOnInsert' => [
            "newField" => "another"
        ]
    ],
    ["upsert" => true]
);</code>

$inc 연산자를 사용하여 rate 필드를 증가시킬 수 있습니다:

<code class="php">[
    '$inc' => [
        "rate" => 1
    ]
],</code>

위 내용은 고유 키 추가 후 MongoDB에서 중복 문서를 방지하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.