Mencegah Dokumen Pendua dalam MongoDB selepas Penambahan Kunci Unik
Walaupun menambah indeks unik pada medan uid dan sid (db.user_services.createIndex ({"uid":1 , "sid": 1},{unique:true,dropDups: true})), dokumen pendua masih boleh dimasukkan kerana pengehadan dalam MongoDB 3.0.0.
Kepada hapuskan pendua sedia ada, prosedur tersuai boleh digunakan:
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})
Prosedur ini mengalih keluar pendua, membolehkan indeks unik dicipta seperti yang dimaksudkan.
Meniru MySQL "ON DUPLIcate KEY " Kelakuan
Untuk mencapai gelagat sisipan (nilai) MySQL pada kunci pendua kemas kini rate=rate 1 menggunakan PHP, kaedah kemas kini() dengan pilihan upsert boleh digunakan:
<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>
Menggunakan operator $inc, medan kadar boleh ditambah:
<code class="php">[ '$inc' => [ "rate" => 1 ] ],</code>
Atas ialah kandungan terperinci Bagaimana untuk Mencegah Dokumen Pendua dalam MongoDB Selepas Penambahan Kunci Unik?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!