新增唯一鍵後如何防止 MongoDB 中出現重複文件?

Susan Sarandon
發布: 2024-10-30 11:10:00
原創
246 人瀏覽過

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 實作MySQL 在重複鍵更新率=速率1 上插入(值)的行為,可以使用PHP 實作MySQL1 上插入(值)的行為,可以使用帶有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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!