【发布时间】:2020-07-29 19:04:51
【问题描述】:
我有一个代码在循环中逐行处理与用户一起处理的文件,并且每次迭代都可以使用下一个代码。如果用户是唯一的,MongoDB 将其插入到集合中,否则它只是更新信息。唯一 ID 是用户的电子邮件。问题是该文件中还包含用户的重复项。
文件如下:
- 约翰 - john@gmail.com
- John 的新名称 - john@gmail.com(重复但名称已更改)
- 马克 - mark@gmail.com
- ...休息
我的代码以在数据库中插入 1. John 的方式对其进行处理,但问题是 mongo DB 无法找到刚刚创建的电子邮件用户 john@gmail.com 并采用 (2. New John name - john@gmail.com) 作为唯一用户。
注意:await 调用在异步函数内部,所以它们应该可以正常工作。
这是它的代码:
try {
let user = await User.findOne({ email: email }).exec();
if (user) { // here mongoose should find 1. John which was created on before loop iteration but it retuns null
let update = {
name: newName,
email: newEmail
}
let updateUser = await User.findByIdAndUpdate(
user._id,
{$set: update},
{new: true}
);
} else {
let newUser = new User({
name: name,
email: email
});
let saveUser = await newUser.save();
res.send('Users uploaded successfully');
} catch (err) {
console.error(err.message);
res.send('Server error');
}
【问题讨论】:
-
你能登录用户看看它给了你什么吗?
-
你没有显示这部分代码,但是你说
line by line in a loop and for each iteration。问题是,你不能在.forEach()内使用await(但你可以在for循环内使用 -
是的,我猜是.forEach的问题,我重新写代码看看结果。
标签: javascript node.js mongodb