【问题标题】:MongoDB can't find just created documentMongoDB 找不到刚刚创建的文档
【发布时间】:2020-07-29 19:04:51
【问题描述】:

我有一个代码在循环中逐行处理与用户一起处理的文件,并且每次迭代都可以使用下一个代码。如果用户是唯一的,MongoDB 将其插入到集合中,否则它只是更新信息。唯一 ID 是用户的电子邮件。问题是该文件中还包含用户的重复项。

文件如下:

  1. 约翰 - john@gmail.com
  2. John 的新名称 - john@gmail.com(重复但名称已更改)
  3. 马克 - mark@gmail.com
  4. ...休息

我的代码以在数据库中插入 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


【解决方案1】:

我的代表人数太少,无法添加评论,所以请原谅我使用答案。我猜问题出在您使用的那种循环上,但如果没有看到更多代码,我无法判断。

如果您已经完成了array.forEach,那么您将度过一段糟糕的时光。您需要为异步内容执行 for(let i in array) 类型循环。

或者,您可以通过映射您的数组然后在您的集合上执行upsertMany 来编译您想要执行的所有操作。

【讨论】:

  • 其实这是一个很好的答案,没有看到OP使用的那种循环。我认为完全相同的事情(在上面的评论中说)。赞成
  • @mark-potter 你说得对,我正在使用 .forEach,对此一无所知。你太棒了。我将快速重新编写代码并回到这里。提前非常感谢!
  • 是的,问题肯定出在 .forEach 中,滑动到 for 循环解决了。再次感谢。
猜你喜欢
  • 1970-01-01
  • 2018-03-09
  • 1970-01-01
  • 2013-05-03
  • 2016-11-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多