2017-03-08 8 views
1

私は、Node.js,mongoose,mongodb,expressおよびangularを使用しています。 私はマングースモデルでアンケートの回答を保存しています。多くの人が特定の調査の回答を提出します。最初の人が調査の回答を提出すると、その調査のための新しい文書を作成したいと思います。 2回目、3回目など、同じ調査の回答を提出する場合は、次のスキーマの返信配列にのみ配列要素を追加します。_idが存在しない場合、配列の要素を配列にプッシュするにはどうすればよいでしょうか?

そして、最初の人が新しい調査の返信を提出するときに、私は新しい調査のために新しい文書を作成したいと思います。どのように私はマングースでこれを行うことができますか?

Mongoose.js: how to implement create or update?で同様の質問が見つかりました。 はしかし、ここで私は[] _idが発見された場合、他の新しい文書

マングースモデルを作成する回答の次の配列のインデックスに新しい返信をプッシュする:

var mongoose = require("mongoose"); 
var Schema = mongoose.Schema; 

var MCQReplySchema = new Schema({ 

    _id : String, 
    surveyname: String, 
    replies :[{ 
     replierId : String, 
     answers : [{ 
      questionId : String, 
      answer : String 
     }] 
    }] 

    }); 

module.exports=mongoose.model('MCQReply',MCQReplySchema); 

保存データベースへのデータ

 router.post("/saveMCQAnswer", function(req, res) { 

     new MCQReply({ 

     _id : '123', 
     surveyname: 'sample', 
     replies :[{ 
      replierId : 'R001', 
      answers : [{ 
      questionId : 'A001', 
      answer : 'answer' 
      }] 
     }] 

    }).save(function(err, doc){ 
     if(err) res.json(err); 
     else 
     req.flash('success_msg', 'User registered to Database'); 
     res.redirect("/"); 

    }); 

    }); 
+0

'_id'は実際には暗黙的に指定されており、Mongooseは一意の' _id'を作成しようとしています - http://mongoosejs.com/docs/guide.html#_idを参照してください。 IDを自分で指定する特定の理由はありますか? – GPX

+0

あなたはこれを見たことがありますか?http://stackoverflow.com/a/13338758/6048928 – RaR

+1

[Mongoose.js:作成または更新を実装する方法?](http://stackoverflow.com/questions/13337685/mongoose- js-how-to-implement-create-or-update) – RaR

答えて

1

疑似コード。

MCQReply.findOne({_id : the id}, function(err,doc){ 
     if(err) console.log(err); 
     // if the survey isn't there `doc` will be null then do your save 
     if(!doc){ 
      new MCQReply({ 

      _id : '123', 
      surveyname: 'sample', 
      replies :[{ 
       replierId : 'R001', 
       answers : [{ 
       questionId : 'A001', 
       answer : 'answer' 
       }] 
      }] 

      }).save(function(err, doc){ 
       if(err) res.json(err); 
       else 
       req.flash('success_msg', 'User registered to Database'); 
       res.redirect("/"); 

      });     
     }else(doc){ 
      //you get mongoose document 
      doc.replies.push({replierId : "R001", answer : [{questionId : "A001" ... whatever else you want}]}) 

      //dont forget to save 
      doc.save(do error check) 
     } 


    }) 

はこれが機能するかどう知っているが、あなたの苦労がちょうど_idを保存する場合

var MCQReplySchema = new Schema({ 

    _id : String, 
    surveyname: String, 
    replies :[{ 
     replierId : String, 
     answers : [{ 
      questionId : String, 
      answer : String 
     }] 
    }] 

    }, {strict : false}); 

{strict :false}場合

{strict : false, _id :false}をしようと動作しないスキーマ()のためにこれをしようとしないでください_id : false

+0

あなたの答えをありがとう。しかし、私はいくつかの問題を抱えています。 doc.replies.push({replierId: "R002"、answer:[{questionId: "A002"}、{answer: "A001"}}});あなたのコードを修正しました。最初の返答では、replierIdとquestionIdは保存されませんでした。二度目の返信については、回答者の中には何もなく、回答[]内には何もありません。これで私を助けることができますか? –

+0

多分あなたのスキーマを表示 –

+0

スキーマは上記の質問にあります。 Robomongoにスキーマのスクリーンショットをアップロードしました。それが受け入れられれば目に見えます。 –

関連する問題