我想要投票应用程序,我有一个名为Poll的架构。 在民意调查架构中,我有一个“选项”对象。 我想通过id更新options.vote。 我如何调用民意调查(id).options(id).vote? 我的尝试:
app.post("/:id/:option_id", function(req, res){
Poll.findById(req.params.id,function(err, poll){
if(err){
console.log("Vote(find the Poll) post err");
} else{
poll.options.findById(req.params.option_id,function(err,option){
if(err){
console.log("Vote(find the option) post err");
} else{
option.vote++;
option.vote.save(function(err){
if(err){
console.log("save vote error");
} else{
res.redirect("/:id/:option_id");
}
});
}});
}
答案 0 :(得分:1)
你不能使用poll.options.findById
,因为它是你在回调中的mongoose函数和poll,而poll.option
不是Poll架构对象。你可能尝试做的是:我在这里假设选项是一个具有Id和投票之一的数组。所以你可以尝试:
var _ = require('lodash');
Poll.findById(req.params.id,function(err, poll){
if(err){
console.log("Vote(find the Poll) post err");
} else{
var options = poll.options;
var optionIndex = _.findIndex(options,["id", req.params.option_id])
poll.options[optionIndex].vote ++;
poll.save(function(err)){
if(err){
console.log("save vote error");
} else{
res.redirect("/:id/:option_id");
}
}
}
});
修改强>: Lodash一个简单的库,它有一些为使用而编写的数组操作方法。