2017-11-07 13 views
0

MongoDBを使用してオンラインでのエダクションアプリケーションのグレードを保存します。以下は、mongoDBデータベースに格納しているclassRoomドキュメントです。 StudentGradeObjsは、GradeObjectの内部の配列に格納されます。 GradeObjsは、教室内でGradeObjectsの配列に格納されます。MongoDB配列内のオブジェクトの配列内のオブジェクト内のプロパティを更新します。

GradeObjsを "hw1"、 "assignment2"などと考えてください。 studentGradeObjsは、学生が課題をどのようにして行ったかを示しています。

{ 
"_id" : ObjectId("5a01d9e3a91726026cb2e52b"), 
"name" : "Bio 212", 
"teacherUsername" : "Mike", 
"studentArray" : [ 
    "5a00cfd4ae1c8a0114d61095", 
    "59ff75021365601935b674d0", 
    "59ff6282fe19e01fdcc2f505" 
], 
"gradeObjs" : [ 
    { 
     "gradeName" : "hw1", 
     "gradeValueMax" : 20, 
     "dueDate" : "12/12/12", 
     "studentGrades" : [ 
      { 
       "username" : "james", 
       "gradeValue" : null, 
       "submissionDate" : null, 
       "isSubmitted" : false 
      }, 
      { 
       "username" : "DickButt", 
       "gradeValue" : null, 
       "submissionDate" : null, 
       "isSubmitted" : false 
      }, 
      { 
       "username" : "john", 
       "gradeValue" : null, 
       "submissionDate" : null, 
       "isSubmitted" : false 
      } 
     ] 
    }, 
    { 
     "gradeName" : "hw2", 
     "gradeValueMax" : 30, 
     "dueDate" : "4/4/15", 
     "studentGrades" : [ 
      { 
       "username" : "james", 
       "gradeValue" : null, 
       "submissionDate" : null, 
       "isSubmitted" : false 
      }, 
      { 
       "username" : "john", 
       "gradeValue" : null, 
       "submissionDate" : null, 
       "isSubmitted" : false 
      }, 
      { 
       "username" : "DickButt", 
       "gradeValue" : null, 
       "submissionDate" : null, 
       "isSubmitted" : false 
      } 
     ] 
    } 
], 
"studentGrades" : { 
    "gradeValue" : 69, 
    "1" : { 
     "gradeValue" : 69 
    } 
} 

}

どのように私はstudentsGrades、アレイ内の個々のgradeValueプロパティを更新することができますか?私のクエリは次のようになります

classCollection.updateOne({$and: [{_id: ObjectId(classID)}, {"gradeObjs.gradeName": gradeName}]}, {$set: {"studentGrades.$.gradeValue": value}}, function(err, thing){ 

答えて

0

私はこの作業を別の方法で行いました。代わりに、私はいくつかのforループを使ってインデックスを見つけ出し、見つかったインデックスでupdateOneを実行しました。

関連する問題