儘管具有唯一鍵,MongoDB 仍會重複文件
在MongoDB 中,在多個欄位上建立唯一索引應該可以防止這些欄位具有相同值的重複文件欄位。然而,在某些情況下,即使在新增索引後,仍然可能會插入重複文件。
問題:
在「uid」和「上建立了唯一索引」集合中的「sid」字段,但仍使用PHP 驅動程式插入這些字段具有重複值的文檔。
解:
MongoDB Shell
檢查現有重複項:
db.user_services.aggregate([ { "$group": { "_id": { "uid": "$uid", "sid": "$sid" }, "dups": { "$push": "$_id" }, "count": { "$sum": 1 } }}, { "$match": { "count": { "$gt": 1 } }} ])
刪除重複項:
db.user_services.remove({ "_id": {"$in": doc.dups }});
建立唯一索引:
db.user_services.createIndex({"uid":1 , "sid": 1},{unique:true})
PHP
使用更新更新:
<code class="php">$collection->update( array( "uid" => 1, "sid" => 1 ), array( '$set' => $someData ), array( 'upsert' => true ) );</code>
處理多重更新:
<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>
以上是儘管使用了唯一索引,為什麼我仍然在 MongoDB 中看到重複文件?的詳細內容。更多資訊請關注PHP中文網其他相關文章!