Maison >développement back-end >tutoriel php >Pourquoi est-ce que je vois toujours des documents en double dans MongoDB malgré l'utilisation d'un index unique ?
Documents en double MongoDB malgré une clé unique
Dans MongoDB, la création d'un index unique sur plusieurs champs devrait empêcher les documents en double avec les mêmes valeurs pour ceux-ci champs. Cependant, dans certains cas, des documents en double peuvent encore être insérés même après l'ajout d'un index.
Problème :
Un index unique a été créé sur "uid" et " sid" dans une collection, mais les documents avec des valeurs en double pour ces champs étaient toujours insérés à l'aide du pilote PHP.
Solution :
MongoDB Shell
Vérifier les doublons existants :
db.user_services.aggregate([ { "$group": { "_id": { "uid": "$uid", "sid": "$sid" }, "dups": { "$push": "$_id" }, "count": { "$sum": 1 } }}, { "$match": { "count": { "$gt": 1 } }} ])
Supprimer les doublons :
db.user_services.remove({ "_id": {"$in": doc.dups }});
Créer un index unique :
db.user_services.createIndex({"uid":1 , "sid": 1},{unique:true})
PHP
Utiliser la mise à jour avec Upsert :
<code class="php">$collection->update( array( "uid" => 1, "sid" => 1 ), array( '$set' => $someData ), array( 'upsert' => true ) );</code>
Gérer plusieurs mises à jour :
<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>
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!