Index
如何測試是否可以在 MongoDB 中創建唯一索引?
我想在我們的生產系統中添加一個新的唯一複合索引。在進行更改之前,我想檢查欄位組合是否唯一,即索引創建成功還是失敗。(組合應該是唯一的,但總是有可能早先出現問題。)
如何在不實際進行更改的情況下檢查創建唯一索引是否會成功?
在嘗試創建唯一索引之前,您可以使用聚合查詢來檢查重複項。
例如,如果您想在欄位
a
和上創建唯一索引b
:
- 插入一些測試數據:
db.mycollection.insert([ {a: 123, b: 456}, {a: 123}, {a: 123, b: 456}, {c: 789 }, {d: 321 } ])
- 查找具有重複值的文件:
db.mycollection.aggregate([ // Group by the field combination you plan to add a unique index on { $group: { _id: { a: "$a", b: "$b"}, count: { $sum: 1 } }}, // Find any groups which are not unique (more than 1 matching document) { $match: { count: { "$gt": 1} }} ])
- 上面範例數據的匯總輸出表明有兩個文件缺少預期的欄位
a
and ,以及兩個文件的andb
值重複:a``b
{ "_id" : { }, "count" : 2 } { "_id" : { "a" : 123, "b" : 456 }, "count" : 2 }
在此範例中,我有意包含了一些缺少預期欄位的文件,因為
null
如果您創建唯一索引,這些文件將被索引為值。預設情況下,即使給定文件缺少唯一索引中的一個或多個欄位,唯一要求仍然適用,因為集合中的所有文件都已添加到索引中。如果您只希望欄位組合在兩個欄位都存在的情況下是唯一的(或使用其他一些條件),您可以創建一個具有唯一約束的部分索引。