我正在尝试创建一个具有唯一电子邮件地址的新帐户。其中一个选项是检查是否已经存在具有相同电子邮件的帐户。如果没有,请创建新帐户。
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 中的unique 选项。
我应该改用那个选项吗?
必须使用 mongoose 内置验证吗?其他选择?
上面的代码被认为是不好的做法吗?
最佳答案
这在 MongoDB 中不是原子安全的。但是,您可以在电子邮件字段上使用唯一索引。如果插入已被使用或有人刚刚同时插入,这将导致插入失败。
如果您计划使用分片,这可能会成为一个问题,因为唯一索引仅在分片键上受支持。
关于mongodb - 插入项原子性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40433092/