尽管具有唯一键,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中文网其他相关文章!