首頁 >後端開發 >php教程 >為什麼即使在使用「dropDups」建立唯一按鍵後,我的 MongoDB 集合中仍會出現重複文件?

為什麼即使在使用「dropDups」建立唯一按鍵後,我的 MongoDB 集合中仍會出現重複文件?

DDD
DDD原創
2024-11-04 07:10:311073瀏覽

Why Am I Getting Duplicate Documents in My MongoDB Collection Even After Creating a Unique Key with `dropDups`?

加入唯一鍵後MongoDB 重複文件

問題陳述

儘管在「上使用唯一鍵建立集合」 uid ”和“sid”字段,重複文檔仍在插入到集合中。

技術細節

使用的索引創建命令:

db.user_services.createIndex({"uid":1 , "sid": 1},{unique:true,dropDups: true})

使用的索引創建命令:

原因

由於集合中存在重複文檔,索引建立失敗。 >

解決方案
  • 刪除重複文件:
要解決此問題,請在建立唯一索引之前刪除重複文件。查詢來實現。 🎜>
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 }});
});
Upsert 操作
  • 對於問題的第二部分,根據現有數據的存在來實現插入或更新文檔的所需行為,使用帶有“upsert”選項的“. update()」方法:
這將修改找到的文件並根據需要插入新文件。此外,您可以使用「$setOnInsert」來指定僅應在文件插入期間設定的欄位。
db.events.createIndex({"uid":1 , "sid": 1},{unique:true})

以上是為什麼即使在使用「dropDups」建立唯一按鍵後,我的 MongoDB 集合中仍會出現重複文件?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn