在 MongoDB 中创建集合并使用 createIndex({"uid":1 , "sid": 1 添加唯一索引时},{unique:true,dropDups: true}),尽管存在唯一键约束,但可能仍会插入重复文档。
在检查索引创建时,可能会遇到指示“重复键错误”的错误消息。这是因为 MongoDB 3.0.0 有一个 bug,当存在重复项时,无法创建索引。
要解决此问题,请首先使用聚合查询和 $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>
删除重复项后,可以创建唯一索引而不会遇到错误。
要插入尚不存在的文档或更新现有文档,请使用 update() 方法,并将 upsert 选项设置为 true。
<code class="php">$collection->update( array( "uid" => 1, "sid" => 1 ), array( '$set' => $someData ), array( 'upsert' => true ) );</code>
如果文档不存在,这将插入文档,否则它将通过设置 $set 数组中指定的字段来更新文档。
以上是尽管有唯一索引,为什么我仍然在 MongoDB 中看到重复文档?的详细内容。更多信息请关注PHP中文网其他相关文章!