Maison  >  Article  >  développement back-end  >  Comment éviter les documents en double dans MongoDB après l'ajout d'une clé unique ?

Comment éviter les documents en double dans MongoDB après l'ajout d'une clé unique ?

Susan Sarandon
Susan Sarandonoriginal
2024-10-30 11:10:00246parcourir

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

Prévention des documents en double dans MongoDB après l'ajout d'une clé unique

Malgré l'ajout d'un index unique sur les champs uid et sid (db.user_services.createIndex ({"uid":1 , "sid": 1},{unique:true,dropDups: true})), des documents en double peuvent toujours être insérés en raison d'une limitation dans MongoDB 3.0.0.

Pour éliminez les doublons existants, une procédure personnalisée peut être utilisée :

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

Cette procédure supprime les doublons, permettant à l'index unique d'être créé comme prévu.

Émulation de "ON DUPLICATE KEY" de MySQL " Comportement

Pour obtenir le comportement de l'insertion (valeur) de MySQL sur le taux de mise à jour de clé en double = taux 1 en utilisant PHP, la méthode update() avec l'option upsert peut être utilisée :

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

À l'aide de l'opérateur $inc, le champ taux peut être incrémenté :

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

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn