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