添加唯一键后防止 MongoDB 中出现重复文档
尽管在 uid 和 sid 字段上添加了唯一索引 (db.user_services.createIndex ({"uid":1 , "sid": 1},{unique:true,dropDups: true})),由于 MongoDB 3.0.0 的限制,仍然可能会插入重复文档。
至消除现有的重复项,可以使用自定义过程:
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})
此过程删除重复项,允许按预期创建唯一索引。
模拟 MySQL 的“ON DUPLICATE KEY” " 行为
要使用 PHP 实现 MySQL 在重复键更新率=速率 1 上插入(值)的行为,可以使用带有 upsert 选项的 update() 方法:
<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>
使用 $inc 运算符,速率字段可以递增:
<code class="php">[ '$inc' => [ "rate" => 1 ] ],</code>
以上是添加唯一键后如何防止 MongoDB 中出现重复文档?的详细内容。更多信息请关注PHP中文网其他相关文章!