1. 程式人生 > >mongodb 稀疏索引(存在才索引)

mongodb 稀疏索引(存在才索引)

官方文件:https://docs.mongodb.com/manual/core/index-sparse/

1 背景

賬號體系設計過程中, 我們需要保證郵箱或手機號唯一。如果使用mongodb作為資料庫。
作為很強大mongodb肯定提供相應功能實現這種需求,而不是手動管理(手動查詢是否存在)

保證唯一性的解決方案就是唯一索引(unique index)。
比如建立一個唯一索引:

db.users.createIndex( { "email": 1 }, { unique: true } )

這樣重複的email將無法被add到資料庫中。

但這裡也帶來了一個問題,如果要同時支援手機號和郵箱,使用者可能使用手機號註冊,則郵箱為null。而唯一索引對於會認為null 也是重複的資料。導致手機號加入到資料庫中失敗。

2 稀疏索引( Sparse Index)

稀疏索引僅包含具有索引欄位的文件的條目,即使索引欄位包含空值也是如此。索引會跳過缺少索引欄位的任何文件。配合唯一索引使用,即可實現對存在的欄位才使用唯一索引。

db.users.createIndex( { "email": 1 }, { sparse: true } )

3 唯一約束的稀疏索引

我們要確保某個欄位存在才確保唯一性,即可以使用稀疏和唯一索引的複合索引來達到這個效果。

db.users.createIndex( { "email": 1 } , { sparse: true, unique: true } )