首页  >  文章  >  后端开发  >  添加唯一键后如何防止 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 实现 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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn