Maison >développement back-end >tutoriel php >Comment éviter les documents en double dans MongoDB après l'ajout d'une clé unique ?
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!