MongoDB中未更新的文档(使用Mongoose)

时间:2018-01-10 18:42:41

标签: node.js mongodb express mongoose

我正在尝试从Mongo数据库更新数组中的对象,并将更新的值保存回数据库。但是,在调用保存我更改的数据后,没有任何内容更新到数据库。

router.post('/:poll*', (req, res)=>{
    var url = '/poll' + req.url;
    Poll.findOne({link: url}, (err, data)=>{
        if(err){
            throw err;
        }
        else{ 
            var theValue;
            for(var key in req.body){
                if(key === 'opt'){
                    theValue = req.body[key];
                }
            }
            var voteCount;
            if(data.voters[0] == null){
                data.voters[0] = {};
                data.voters[0][req.user.username] = theValue;
                data.options[0][theValue] = data.options[0][theValue] + 1;
            }
            else{
                if(data.voters[0][req.user.username] != theValue){
                    var previous = data.voters[0][req.user.username];
                    data.voters[0][req.user.username] = theValue;
                    data.options[0][theValue] = data.options[0][theValue] + 1;
                    if(previous){
                        data.options[0][previous] = data.options[0][previous] - 1;
                    }
                }
            }
        }
        console.log(data.voters)
        data.save(function(err){
            if(!err){
                console.log('saved');
            }
            else{
                console.log('error');
            }
        });
        res.send("Your input has been submitted.");
    });
});

我还把(我已经改变的数据)之前的console.log(我已经改变的数据)放在.save(function(...))代码中。

我该怎么做才能解决这个问题?

编辑(我如何解决): 当我访问数组并修改它们时,Mongo似乎没有保存我的数组:

data.voters[0][username] = value;

相反,我使用弹出对象,修改它,然后将其推回。现在我看到数据库中的值已正确保存/更新。

Aka之类的:

var obj = data.voters.pop(); obj[username] = value; data.voters.push(obj);

任何人都知道为什么会这样吗?

0 个答案:

没有答案