Index

如何測試是否可以在 MongoDB 中創建唯一索引?

  • October 24, 2018

我想在我們的生產系統中添加一個新的唯一複合索引。在進行更改之前,我想檢查欄位組合是否唯一,即索引創建成功還是失敗。(組合應該是唯一的,但總是有可能早先出現問題。)

如何在不實際進行更改的情況下檢查創建唯一索引是否會成功?

在嘗試創建唯一索引之前,您可以使用聚合查詢來檢查重複項。

例如,如果您想在欄位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}
   }}
])
  • 上面範例數據的匯總輸出表明有兩個文件缺少預期的欄位aand ,以及兩個文件的andb值重複:a``b
{ "_id" : {  }, "count" : 2 }
{ "_id" : { "a" : 123, "b" : 456 }, "count" : 2 }

在此範例中,我有意包含了一些缺少預期欄位的文件,因為null如果您創建唯一索引,這些文件將被索引為值。預設情況下,即使給定文件缺少唯一索引中的一個或多個欄位,唯一要求仍然適用,因為集合中的所有文件都已添加到索引中。

如果您只希望欄位組合在兩個欄位都存在的情況下是唯一的(或使用其他一些條件),您可以創建一個具有唯一約束的部分索引

引用自:https://dba.stackexchange.com/questions/220793