3
我正嘗試使用唯一的電子郵件創建新帳戶。其中一個選項是檢查是否存在具有相同電子郵件的帳戶。如果沒有,請創建新帳戶。插入項目原子性
Account
.find({email: req.body.email})
.exec((err, accounts) => {
//Try to find an account that have the same email
if (!accounts.length) {
//If none is found create a new account with this email
var account = new Account({email: req.body.email});
account.save();
}
});
這種方法的問題是,我不清楚這是否是原子安全的。如果多個用戶同時嘗試使用同一封電子郵件創建新帳戶,該怎麼辦?這會毀了我的數據庫的一致性嗎?
我聽說過 獨特選項 SchemaType。
我應該選擇那個選項嗎?
正在使用貓鼬內置驗證一個必須?其他選項?
上面的代碼被認爲是不好的做法?
我該如何處理唯一索引錯誤?他們的簽名是什麼?也許我指向一些文檔? – rocketspacer
錯誤的類型可能取決於您的數據庫驅動程序。我認爲貓鼬不會包裝錯誤,所以你會得到一個'MongoError:E11000重複鍵錯誤索引'。這可能有所幫助:https://github.com/Automattic/mongoose/issues/1225 – Erik