我正在尝试使用唯一的电子邮件创建新帐户。其中一个选项是检查是否存在已存在相同电子邮件的帐户。如果没有,请创建新帐户。
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 中的唯一选项。
答案 0 :(得分:3)
这在MongoDB中不是原子安全的。但是,您可以在电子邮件字段中使用唯一索引。如果插入已经使用或者有人只是同时插入它,这将导致插入失败。
如果您打算使用分片,这可能会成为问题,因为仅在分片键上支持唯一索引。