Rumah > Artikel > pembangunan bahagian belakang > Mengapa Saya Masih Melihat Dokumen Pendua dalam MongoDB Walaupun Mempunyai Indeks yang Unik?
Apabila mencipta koleksi dalam MongoDB dan menambah indeks unik menggunakan createIndex({"uid":1 , "sid": 1 },{unique:true,dropDups: true}), nampaknya dokumen pendua masih dimasukkan walaupun terdapat kekangan kunci yang unik.
Setelah memeriksa penciptaan indeks, mesej ralat yang menunjukkan "ralat kunci pendua" mungkin ditemui. Ini kerana MongoDB 3.0.0 mempunyai pepijat yang menghalang indeks daripada dicipta apabila pendua wujud.
Untuk menyelesaikan masalah ini, mula-mula alih keluar rekod pendua menggunakan pertanyaan agregat dan operator $match.
<code class="javascript">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 }}); });</code>
Setelah pendua dialih keluar, indeks unik boleh dibuat tanpa menghadapi ralat.
Untuk memasukkan dokumen yang belum wujud atau mengemas kini dokumen sedia ada, gunakan kaedah kemas kini() dengan pilihan upsert ditetapkan kepada benar.
<code class="php">$collection->update( array( "uid" => 1, "sid" => 1 ), array( '$set' => $someData ), array( 'upsert' => true ) );</code>
Ini akan memasukkan dokumen jika ia tidak wujud, jika tidak, ia akan mengemas kini dokumen dengan menetapkan medan yang dinyatakan dalam tatasusunan $set.
Atas ialah kandungan terperinci Mengapa Saya Masih Melihat Dokumen Pendua dalam MongoDB Walaupun Mempunyai Indeks yang Unik?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!