2016-05-29 7 views
0

My DBには、ユーザー、教育、コースのコレクションがあります。Collectionにオブジェクトを挿入するときに_idが見つかりません

サーバーが起動すると、必要なデータ(mandatoryCoursesという配列を含む)に選択したコースが含まれているはずです。以下のコード:これは1つの詳細を除いて、正常に動作します

educationData.forEach((education) => { 
     Educations.insert({ 
      name: education.name, 
      nickname: education.nickname, 
      mandatoryCourses: [] 
     }); 

     education.courses.forEach((code) => { 
      let course = Courses.findOne({code: code}); 
      Educations.update({name: education.name}, { 
       $addToSet: { 
        mandatoryCourses: course 
       } 
      }); 
     }); 
    }); 

:コースがあり

_idフィールドがmandatoryCoursesでコースのエントリではありませんが、まだ他のすべての属性があります。 console.log(コース)を確認すると、コースには実際に_idが含まれていますが、配列エントリには表示されません。

同様の操作は、ユーザーがコースを自分自身に追加するaddCourseです。この操作は、以下の_idコードを含む完璧に機能します。

let course = Courses.findOne({code: courseId}); 
    Meteor.users.update(userId, { 
     $addToSet: { 
      courses: course 
     } 
    }); 

コースIDの使用は正しいです。私の疑念は、この問題は、必須コースが使用するスキーマの中にあるということです。参考のため、user.coursesフィールドは空の配列として初期化されていますが、mandatoryCoursesはコースの配列[Course]として定義されています。

順番にコーススキーマは次のようになります。

Courses.schema = new SimpleSchema({ 
    name: { 
     type: String, 
     label: "Course name" 
    }, 
    code: { 
     type: String, 
     label: "Course code" 
    }, 
    points: { 
     type: Number, 
     label: "Points" 
    }, 
    finished: { 
     type: Boolean, 
     defaultValue: false 
    } 
}); 

ものもmandatoryCourses配列に行くの正確な属性です。

何とか明示的に_idをコーススキーマで宣言する必要がありますか?コースがコースコレクションに追加されたときにうまく動作するように見えます。これは、必須のコースとやり取りするときだけではありません。

ありがとうございます。

答えて

0

コーススキーマに_idフィールドを追加すると、そのトリックが実行されます。

私はまだ相互作用については不明であり、誰かがmandatoryCoursesの場合になぜそれを含める必要があるのか​​を明確にするのが好きですが、スキーマの他の用途にはうまくいきました。