2017-08-23 9 views
0

私は投票アプリケーションを作りたい、私は投票と呼ばれるスキーマを持っています。 Pollスキーマの には「オプション」オブジェクトがあります。 idでoptions.voteを更新したいと思います。 私はどのようにPoll(id).options(id).voteを呼び出しますか?それはあなたがコールバックの中に入るマングース機能や投票で、poll.optionはポール・スキーマ・オブジェクトではありませんとあなたがpoll.options.findByIdを使用することはできません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

'.findById()'は '.findOne({" _id ":id})'のエイリアス化されたショートカットであるため、 '.findOne()'が必要です。それがすべてです。あなたは何か他のものが必要な場合は、代わりに完全な方法を使用します。 –

答えて

1

:私の試し 。あなたがしようとするかもしれません:私はここではオプションがIdのフィールドと投票の1つを持つ配列であると仮定しています。ですから、試すことのように:

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"); 
      } 

     } 
    } 
}); 

EDIT:使用するために書かれたいくつかの配列操作方法を持っている Lodashシンプルなライブラリ。

+0

ありがとうございますので、最初にあなたがIDでポールを見つけたら、オプションのインデックスを見つけて投票を増やして保存してください。私の質問: "lodash"(私には "モジュール" lodash "が見つかりません"というエラーが出ます)とは何ですか?私はそれをgoogleとほとんど理解していない –

+0

あなたはコマンドを実行してlodashモジュールをインストールする必要がありますnpm install lodash --save @NaorMalcaをインストールします。詳細については、編集された回答を確認してください –

関連する問題