2017-08-23 94 views
0

我想做一个投票应用程序,我有一个架构称为投票。 在调查模式我有一个“选项”对象。 我想通过id更新options.vote。 我打电话给民意调查(id).options(id).vote? 我尝试:Mongoose和mongodb findById与对象在对象

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

你想'.findOne()'作为'.findById()'是“严格地说”'.findOne({“_id”:id})的别名快捷方式''。就是这样。你想要别的东西,那么你可以使用完整的方法。 –

回答

1

不能使用poll.options.findById,因为它是猫鼬的功能和民意测验你得到回调内部,poll.option不是轮询模式对象。你可能试图做的是:我在这里假设选项是一个有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具有用于使用写了一些阵列操作方法简单的图书。

+0

谢谢,所以首先你通过id找到民意调查,找到选项索引后增加投票,并保存。和我的问题:它的“lodash”(它给我一个错误“无法找到模块'lodash'”)。我google它,有点不明白 –

+0

你需要通过运行命令安装lodash模块npm install lodash --save @NaorMalca。查看编辑的答案以获取更多信息 –