我正在尝试从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);
任何人都知道为什么会这样吗?