我需要检查Mongo中的两个单独的集合,以查看是否存在电话号码。
我首先创建了一个名为'ownerId'的全局变量
然后我在一个集合中调用'Profile'。如果我传递的电子邮件值存在于该集合中文档的“电子邮件”数组中,我将使用该文档中名为“owner_id”的值填充我创建的“ownerId”变量。
然后我查看另一个名为“User”的集合,它有一个电子邮件字段。如果我传递的电子邮件值存在于该集合中的文档中,我将使用该文档的“_id”填充我创建的“ownerId”变量。
我的查询嵌套在一对'then()'语句中。
这是我的代码:
<tr>
结果并不如我所料。
如果'Profile'查询为true并找到匹配项,那么它将使用值控制台记录ownerId。
如果第二个“用户”查询为真,但“配置文件”不匹配,则会控制日志“空”。我希望它能控制登录用户结果的_id值。
任何人都可以在我的逻辑中看到错误吗?
答案 0 :(得分:0)
我不会混合回调和承诺。我建议使用async/await。它使异步代码看起来是同步的。例如:
let owner_id;
try {
let profile = await Profile.findOne({ 'emails.email_address': req.body.invited_email });
let user = await User.findOne({ 'email': req.body.invited_email }):
if (profile) {
owner_id = profile.owner_id;
} else if (user) {
owner_id = user.owner_id;
} else {
console.log('no owner id found');
}
} catch(err) {
console.log(err);
}
代码包含在try / catch中以处理错误,就像普通承诺的catch()
方法一样。使用await
的功能需要async关键字。
await
用于等待承诺完成。不需要回调。您可以看到代码看起来像普通的同步代码。