Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/417.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Mongoose find-从查询中至少返回一个匹配项_Javascript_Mongodb_Mongoose - Fatal编程技术网

Javascript Mongoose find-从查询中至少返回一个匹配项

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

我正在构建一个应用程序(MongoDB数据库),用户可以在其中注册帐户。帐户模型有3个值应该是唯一的:ID、用户名和电子邮件。我正在使用MongooseV5.5.5进行查询等

当有人想注册一个新帐户时,我想做一个查询(findOne或find),看看是否有一个ID为用户名邮件的用户。我认为下面的代码可以工作

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 }
})