2017-08-23 74 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。查看編輯的答案以獲取更多信息 –