首页 > 解决方案 > 尝试在 MongoDB 中使用 updateOne(),但它没有更新文档或给我一个错误?

问题描述

我正在尝试将从计算器获得的值添加到数据库中的用户文档中,但是它没有显示任何错误或更新文档,页面只是永远加载,我不知道为什么。下面是我要更新的代码:

   router.post('/tdeecalculator', function(req, res){
        User.updateOne({email: "testtesttest@test.com"}, {$set: {tdeenumber: req.body.tdee}})
    });

以下是我的用户架构:

const UserSchema = new mongoose.Schema({
    name: {
        type: String,
        required: true
    },
    email: {
        type: String,
        required: true
    },
    password: {
        type: String,
        required: true
    },
    tdeenumber: {
        type: Number,
        required: false
    },
    ormnumber: {
        type: Number,
        required: false
    }
})

const User = mongoose.model('User', UserSchema);
module.exports = User;

MongoDB 中的文档显示如下:

_id: 60c217c26c83903ee454c2c5
name: "testtesttest"
email: "testtesttest@test.com"
password: "$2a$10$zQ4Jk3KKCjjNTyY0Z48/X.JkPO0J5lfV6j4gqTR1sLmqxKqvSq8mW"
__v: 0

可能是因为实际文档中没有显示 tdeenumber 吗?任何帮助将非常感激

标签: javascriptnode.jsmongodbexpress

解决方案


您应该async/await在 db 查询之前使用过,您也没有返回对您收到的呼叫的响应。

像这样转换您的控制器并正确查看错误。

// Used async before the function to use await before the db query
router.post('/tdeecalculator', async (req, res) => {

//Wrapped your operation with try/catch block to catch error message and show it in console and response

    try {
        await User.updateOne({ email: "testtesttest@test.com" }, { $set: { tdeenumber: req.body.tdee } })
        res.send({ success: 1 });
        return;
    } catch (error) {
        console.log(error.message);
        res.send({
            success: 0,
            error: error.message
        });
    }
});


推荐阅读