我试图创建一个新的帐户与独特的电子邮件。其中一个选项是检查是否存在相同电子邮件的帐户。如果没有,创建新帐户。
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中的唯一选择。
我应该选择这个选项吗?
使用猫鼬内置验证是必须的吗?其他选择?
上述代码是否被认为是错误的做法?
发布于 2016-11-04 23:33:05
这在MongoDB中是不安全的。不过,您可以在“电子邮件”字段上使用唯一的索引。这将导致插入失败,如果它已经使用,或者如果有人刚刚插入它并发。
如果计划使用切分,这可能会成为一个问题,因为只有碎片键才支持唯一的索引。
https://stackoverflow.com/questions/40433092
复制相似问题