最近在使用mongoose插入文檔的時(shí)候遇到了一個(gè)錯(cuò)誤,
錯(cuò)誤大致如下:MongoError: E11000 duplicats key error index: xxx$user_1 dup key: { : null}
意思很明顯,插入的key對(duì)應(yīng)的value值已經(jīng)存在,但是疑惑的地方就在于,這個(gè)值是null,null為什么會(huì)重復(fù)?
原因就在于user這個(gè)key使用了unique的屬性,for example:
? ? let schema = new Schema({
? ? ? ? ?user: { type: String, unique: true }
? ? });
當(dāng)創(chuàng)建文檔的時(shí)候如果不添加user這個(gè)key,就會(huì)被賦一個(gè)默認(rèn)值null,而這個(gè)null只能存在一個(gè),再次創(chuàng)建一個(gè)user為null的時(shí)候就會(huì)報(bào)上面的錯(cuò)誤。
難道沒有解決辦法了嗎?不,聰明的mongodb考慮到了,于是提供了sparse屬性,這兩個(gè)搭配使用就可以解決這個(gè)問題。
官方文檔:An index that is both sparse and unique prevents collection from having documents with duplicate values for a field but allows multiple documents that omit the key.
于是這樣使用:
? ? let schema = new Schema({
? ? ???? user: { type: String, unique: true, sparse: true }
? ? });
如果key不是必須唯一的建議不使用unique屬性。