Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.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
Node.js MongoDB在数组中查找对象_Node.js_Mongodb - Fatal编程技术网

Node.js MongoDB在数组中查找对象

Node.js MongoDB在数组中查找对象,node.js,mongodb,Node.js,Mongodb,我正在尝试查找我的帐户集合中是否存在用户名。一个帐户可以有多个用户,但我正在尝试在使用该用户名创建对象之前检查用户名是否存在,如果存在,则返回该用户名 现在,我只关注于检查它是否存在。这就是我目前拥有的: const acc = await Account.findOne({"Email": req.body.Email}); if(!acc) throw Error('Email not found'); if(Account.findOne({"Users.Us

我正在尝试查找我的帐户集合中是否存在用户名。一个帐户可以有多个用户,但我正在尝试在使用该用户名创建对象之前检查用户名是否存在,如果存在,则返回该用户名

现在,我只关注于检查它是否存在。这就是我目前拥有的:

const acc = await Account.findOne({"Email": req.body.Email});
if(!acc) throw Error('Email not found');
if(Account.findOne({"Users.Username":req.body.User.Username})) throw Error('Username already exists');
编辑:不确定这是否有帮助,但它会抛出错误,即使用户数组为空

Account.findOne({"Users.Username":req.body.User.Username})
将返回一个承诺,该承诺无论最终解析为什么,都将在此处计算为
true
如果(Account.findOne({“Users.Username”:req.body.User.Username}))。因此,每次运行时,代码都会抛出
用户名已经存在的错误,这真的就不足为奇了

您应该将其更改为第一次查找时的样子(即使用
wait
),或者执行以下操作:

Account.findOne({"Users.Username":req.body.User.Username})
   .then(result => {
      if(result)
         throw Error('Username already exists');
      else
        ...
   })
   .catch(e => {...})

我不明白这个解释中的问题是什么,你能把你的问题弄清楚吗?第二个问题的
wait
在哪里?@MohammadMomeni是的,wait就是问题所在。我试图检查是否存在具有相同属性值的对象。我钦佩地说,这并不是最好的解释,因为等待似乎是问题所在。谢谢,我如何将找到的用户设置为变量?@fallingforward,方法与第一个
wait
相同:
const User=wait Account.findOne({“Users.Username”:req.body.User.Username})
。或者使用我在答案中显示的promise结构,返回整个帐户文档。用户是存储在每个数据库中的文档数组account@FallingInForward如果您向我展示一个示例文档,我可以向您展示如何从该数组中检索特定用户。