一意のキー追加後の 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 を使用して重複キー更新レート = レート 1 での MySQL の挿入 (値) の動作を実現するには、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 中国語 Web サイトの他の関連記事を参照してください。