2016-03-19 2 views
1

ansを他のintに変更するにはcourseList.quizScoreretryを1で増やしてください。mongodbとmeteorjsの更新ステートメント?mongodbでmeteorjs入れ子になった配列にvarを設定するには

以下は私のクエリです。私は$ setを使用していますが、これは正しい操作ですか? 1つの更新ステートメントで$ setと$ incを使用できますか?

collection.jsx

Meteor.users.update({ 
    _id: Meteor.userId(), 
    "courseList.courseId": courseId, 
    "courseList.quizScore.qnNum": qnNum, 
}, { 
    $set: { 
     "courseList.quizScore.$.ans": selectedAns 
    } 
}) 

MongoDBの

{ 
    "_id": "yo8Mi2jKtoNSzgLDL", 
    "courseList": [ 
    { 
     "courseId": "nJmu5HW7g3wjWo47P", 
     "classId": "3RniSRC3NurDRwZ2x", 
     "quizScore": [ 
     { 
      "qnNum": 0, 
      "ans": 0, 
      "retry": 1 
     }, 
     { 
      "qnNum": 1, 
      "ans": 0, 
      "retry": 1 
     } 
     ], 
     "status": "Not Started" 
    }, 
    { 
     "courseId": "5ge2grte3wjWo4rh", 
     "classId": "bffbeRC3NurDRtbf", 
     "quizScore": [ 
     { 
      "qnNum": 0, 
      "ans": 1, 
      "retry": 1 
     }, 
     { 
      "qnNum": 1, 
      "ans": 2, 
      "retry": 3 
     } 
     ], 
     "status": "Not Started" 
    } 
    ] 
} 

答えて

1

あなたのデータの配列内の配列があり、あなたが知っている限り、ネストされたサブ配列quizScoreを参照する簡単な方法はありません更新するサブアレイの位置を指定します。

外部配列courseListから$にアクセスし、内部配列quizScoreにアクセスすることができます。 1つの更新ステートメントで$set$incを使用してcourseIdに一致するquizeScoreの最初の要素を更新するサンプルコードがあります。

Meteor.users.update(
      {_id: Meteor.userId(), 
      'courseList.courseId': courseId}, 
      {$set: {'courseList.$.quizScore.0.ans': selectedAns}, 
      $inc: {'courseList.$.quizScore.0.retry': 1} 
      }); 
関連する問題