2016-08-12 3 views
0

現在、私はng-modelを使ってMongoDBにデータを挿入しています。 ng-modelを使用してMongoDBの配列にデータを挿入する方法はありますか? 回答は、ユーザーが入力する4つの文字列を含む配列です。 quiz.quizData.answersに[0]、[1]、[2]、[3]を追加しようとしましたが、データを配列として正しく入力しませんでした。AngularJSでng-modelを使ってMongoose/MongoDBの配列に挿入する

 "answers" : [ 
      { 
       "0" : "My First Answer", 
       "1" : "My Second Answer" 
      } 
], 

代わりに、それはどうあるべきかの:

"answers" : [ 
    "My First Answer", 
    "My Second Answer" 
], 

私のHTML入力フォーム:

<input type="text" name="answers" ng-model="quiz.quizData.answers" placeholder="enter answers here" required> 
<input type="text" name="answers2" ng-model="quiz.quizData.answers" placeholder="enter other answers here" required> 

マイエンドポイント

代わりに、それはこのようにそれを入力します
// POST request for users to post a new quiz entry 
    apiRouter.route('/quiz') 

    .post(function(req, res) { 
     // Create quiz object and assign to 'quiz' 
     var quiz = new Quiz(); 
     // Contains the quiz question 
     quiz.question = req.body.question; 
     // Contains an array with four quiz answers 
     quiz.answers = req.body.answers; 
     // Contains one string that matches the correct answer from the array above 
     quiz.correctAnswer = req.body.correctAnswer; 
     // Identifies user creating the quiz 
     quiz.postedBy = req.body.postedBy; 
     // Identifies the category of the quiz 
     quiz.category = req.body.category; 
     // then save new quiz to database 
     quiz.save(function(err) { 
      // If an error occurs, display error message in JSON format 
      if (err) { 
       return res.json({ success: false, message: 'something went way wrong....' + err }); 
      } else { 
       // If no error occurs and it saves, display success 
       res.json({ message: 'Quiz Created!' }); 
      } 
     }); 
    }); 

マイMongoDBのスキーマ:あなたの配列が既に存在する場合

<input ng-repeat="i in [1,2,3,4]" type="text" name="answers{{i}}" ng-model="quiz.quizData.answers[i]" placeholder="enter answers here" required> 

:あなたは空の配列を開始している場合は、ちょうどの範囲を反復NG・リピートを使用することができます

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

// post schema 
var QuizSchema = new Schema({ 
    question: { type: String, lowercase: true, required: true }, 
    answers: { type: Array, required: true }, 
    correctAnswer: { type: String, required: true }, 
    category: { type: String, lowercase: true, required: true }, 
    postedBy: { type: String, required: true } 
}); 

module.exports = mongoose.model('Quiz', QuizSchema); 

答えて

0

変数配列の長さを考慮したい場合は、ng-repeat$ indexを使用できます。あなたは$インデックスによってトラックを追加したり、重複キーで問題が発生しますことを確認してください:

<input ng-repeat="answer in quiz.quizData.answers track by $index" type="text" name="answers{{$index}}" ng-model="quiz.quizData.answers[$index]" placeholder="enter answers here" required> 

https://plnkr.co/edit/dwHIFTftgq5LFfTOpc9X?p=info

+0

残念ながら、まったく同じ問題が発生しました。配列の内部にオブジェクトとして4つの文字列ではなく配列の中に挿入します –

+0

どのオプションを試しましたか? – Wake

+0

私は両方のオプションを試しました。 –

0

HTML

<input type="text" name="answer1" ng-model="answersArray[0]" placeholder="answer 1"> 
<input type="text" name="answer2" ng-model="answersArray[1]" placeholder="answer 2"> 
<input type="text" name="answer3" ng-model="answersArray[2]" placeholder="answer 3"> 
<input type="text" name="answer4" ng-model="answersArray[3]" placeholder="answer 4"> 
<input type="hidden" name="answers" ng-model="quiz.quizData.answers" placeholder="enter answers here" ng-init="quiz.quizData.answers = answersArray"> 

コントローラ

$scope.answersArray = [ 
answer1 = $scope.answer1, 
answer2 = $scope.answer2, 
answer3 = $scope.answer3, 
answer4 = $scope.answer4 
]; 
関連する問題