Cam*_*sen 2 javascript mongoose mongodb
我正在构建一个应用程序(MongoDB 数据库),用户可以在其中注册一个帐户。帐户模型有 3 个应该是唯一的值:ID、用户名和电子邮件。我正在使用 Mongoose v5.5.5 进行查询等。
当有人想注册一个新帐户时,我想做一个查询(findOne 或 find)以查看是否有具有该 ID或用户名或邮件的用户。我认为下面的代码会起作用。
let query = {
'id': sanitized.id,
'username': sanitized.username,
'mail': sanitized.mail
}
AccountModel.find(query, (error, data) => {
// Handle result
})
Run Code Online (Sandbox Code Playgroud)
所以假设有一个用户名为user1和电子邮件user1@mail.com。现在另一个用户想要注册用户名user2但使用与 user1 相同的电子邮件。
如何执行匹配OR用户名或邮件的查询,以便我可以判断其中任何一个已被其他用户使用?
我更喜欢使用单个查询来保持代码整洁,但我还没有找到解决方案。希望有人能帮忙。
您可以使用 $or 聚合来传递不同的查询
let query = {
'$or': [
{'id': sanitized.id},
{'username': sanitized.username},
{'mail': sanitized.mail}
]
}
Run Code Online (Sandbox Code Playgroud)
这将返回与任何查询匹配的所有文档。在我的系统中,我在 Promise.all 中所做的实际上是两个查询,一个用于 userName,一个用于 userEmail,以便更轻松地验证数据(result[0] = userName,result[1] = userEmail)
例如
Promise.all([
AccountModel.find({'username': sanitized.username}).exec(),
AccountModel.find({'mail': sanitized.mail}).exec(),
]).then(validation => {
if(validation[0]){// username taken }
if(validation[1]){// email taken }
})
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
599 次 |
| 最近记录: |