为什么使用猫鼬将数据存储两次?

时间:2019-09-04 14:33:36

标签: javascript node.js mongodb mongoose

我想在属性调用案例中保存大量数据。我要做的是迭代要存储的数据列表,然后将每个数据添加到文档的属性中。但是问题是每个数据都存储了两次。我在github上发现了一个有同样问题的人,他说问题出在nodemon上,但是我又再次在没有nodemon的情况下运行了服务器,这是同样的问题。

还在堆栈中发现一个问题,当应用回调时,它将导致两次保存,这与我的情况不同:

Why does using mongoose callback result in saving data twice?

我尝试删除回调,但是仍然存在相同的问题。 (我不认为回调可以做到这一点)

这是代码:

var UserSchema = Schema({
    user: {type: String},
    password: {type: String},
    name: {type: String},
    privilege: {type: String},
    cases: {type: Array}
})

var user = db.model('User', UserSchema , "users");

app.post("/addCases", function(req, res){

    user.find({user: req.body.user}, async function(err, doc) {

        if(err) {
            console.log(err);
        } else {

            for (const iterator of req.body.list) {

                await user.updateOne({user: req.body.user},
                    { $push: {cases: iterator}}, {useFindAndModify: false}, function(err, raw) {
                        if(err) {
                            console.log(err);
                        } else {
                            console.log(value + ' <----- Value');
                    }
                });
            }
        }
    });
});

1 个答案:

答案 0 :(得分:1)

我认为您的问题可能与您未结束服务器代码中的请求有关。在对数据库进行修改之后,您应该向前端发送一个响应,否则,它可能会尝试重复该请求,最终您的端点将被调用两次。

尝试类似的东西:

app.post("/addCases", function(req, res){

    user.find({user: req.body.user}, async function(err, doc) {

        if(err) {
            console.log(err);
        } else {

            for (const iterator of req.body.list) {

                await user.updateOne({user: req.body.user},
                    { $push: {cases: iterator}}, {useFindAndModify: false}, function(err, raw) {
                        if(err) {
                            console.log(err);
                        } else {
                            console.log(value + ' <----- Value');
                    }
                });
            }
        }
        // New code
        res.json({ ok: true });
    });
});