Javascript Mongoose find-从查询中至少返回一个匹配项
我正在构建一个应用程序(MongoDB数据库),用户可以在其中注册帐户。帐户模型有3个值应该是唯一的:ID、用户名和电子邮件。我正在使用MongooseV5.5.5进行查询等 当有人想注册一个新帐户时,我想做一个查询(findOne或find),看看是否有一个ID为或用户名或邮件的用户。我认为下面的代码可以工作Javascript Mongoose find-从查询中至少返回一个匹配项,javascript,mongodb,mongoose,Javascript,Mongodb,Mongoose,我正在构建一个应用程序(MongoDB数据库),用户可以在其中注册帐户。帐户模型有3个值应该是唯一的:ID、用户名和电子邮件。我正在使用MongooseV5.5.5进行查询等 当有人想注册一个新帐户时,我想做一个查询(findOne或find),看看是否有一个ID为或用户名或邮件的用户。我认为下面的代码可以工作 let query = { 'id': sanitized.id, 'username': sanitized.username, 'mail': sanitized.mai
let query = {
'id': sanitized.id,
'username': sanitized.username,
'mail': sanitized.mail
}
AccountModel.find(query, (error, data) => {
// Handle result
})
因此,假设有一个用户的用户名为usernameuser1和emailuser1@mail.com。
现在,另一个用户希望注册用户名usernameuser2,但使用与user1相同的电子邮件
如何执行与或用户名或邮件匹配的查询,以便我可以判断其他用户是否已在使用这些用户名
我更喜欢使用一个查询来保持代码干净,但我还没有找到解决方案。希望有人能帮忙。您可以使用$或聚合来传递不同的查询
let query = {
'$or': [
{'id': sanitized.id},
{'username': sanitized.username},
{'mail': sanitized.mail}
]
}
这将返回与任何查询匹配的所有文档。在我的系统中,我所做的实际上是Promise.all中的两个查询,一个用于用户名,一个用于userEmail,以便更容易地验证数据(结果[0]=用户名,结果[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 }
})