我有這樣的事情:獨特而稀疏索引會導致重複錯誤
var mongoose = require('mongoose');
mongoose.connect('mongodb://...');
var UserSchema = mongoose.Schema({
name: {
type: String,
unique: true
},
token: {
type: String,
unique: true,
sparse: true
}
});
var User = mongoose.model('User', UserSchema);
var peter = new User();
peter.name = 'peter';
peter.token = null;
peter.save(function(err) {
if (err) console.log(err);
console.log('done with peter');
var john = new User();
john.name = 'john';
john.token = null;
john.save(function(err) {
if (err) console.log(err);
console.log('done with john');
});
});
所以peter
首先事後john
創建。然而,當john
保存mongoose
返回以下錯誤
{ [MongoError: E11000 duplicate key error index: node-login.users.$token_1 dup key: { : null }]
name: 'MongoError',
err: 'E11000 duplicate key error index: node-login.users.$token_1 dup key: { : null }',
code: 11000,
n: 0,
lastOp: 0,
connectionId: 4527333,
ok: 1 }
代碼試圖在mongolab運行mongo v2.0.7
和mongoose v3.5.1
。
我以爲設置索引sparse
允許多個null
值。索引被正確設置爲mongolab後端的「索引」選項卡true
對於unique
和sparse
。任何想法,爲什麼我得到錯誤?
我需要用戶註冊了'token'。用戶註冊併發送帶有令牌的電子郵件。用戶點擊帶有令牌的鏈接。我的應用程序查看令牌並驗證它。驗證後,我想將標記設置爲「null」。所以最後我會有多個用戶使用獨特的令牌和多個使用'null'令牌的用戶。你會如何解決這個問題? – zemirco
如果您想保留唯一的稀疏索引,請不要將'token'設置爲'null',['$ unset'](http://docs.mongodb.org/manual/reference/operators/#_S_unset)它而是將其刪除。 – JohnnyHK