ホームページ  >  記事  >  バックエンド開発  >  一意のキーを追加した後、MongoDB でドキュメントの重複を防ぐ方法は?

一意のキーを追加した後、MongoDB でドキュメントの重複を防ぐ方法は?

Susan Sarandon
Susan Sarandonオリジナル
2024-10-30 11:10:00246ブラウズ

How to Prevent Duplicate Documents in MongoDB After Unique Key Addition?

一意のキー追加後の 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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。