Mongoose和mongodb findById与对象中的对象

时间:2017-08-23 10:57:58

标签: node.js mongodb

我想要投票应用程序,我有一个名为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");
               } 
               });
           }});
       }

1 个答案:

答案 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一个简单的库,它有一些为使用而编写的数组操作方法。