2016-05-12 4 views
1

MEANスタックを介して実行される単一のページアプリケーションがあります。私はKlausurのための以下のスキーム/モデルを持っています(Klausurは試験のためのドイツ語です、私は試験を管理したい)。MEANの全エントリを編集せずにデータをMongoDBにプッシュ

var KlausurSchema = new Schema(
    { 
     name: String, 
     semester: String, 
     krankmeldungen: [Number], 
     aufgaben: [{ 
      name: String, 
      punkte: Number 
     }], 
     studenten: [{ 
      matrnr: Number, 
      vorname: String, 
      nachname: String, 
      bewertung: [{ 
       punkte: Number 
      }], 
      pversuch: String, 
      pvermerk: String, 
      freiverm: String, 
      labnr: Number, 
      porgnr: Number, 
      aenddat: String 
     }] 
    } 
); 

複数のユーザーがエントリを編集できます。そうしないと、複数のユーザーがエントリを上書きします。私は "学生"(学生)からなるテーブルを持っていたい、 "学生"に1人の学生をプッシュすることは可能ですか? "Klausur"全体をPUTTING(編集)せずに、すなわち、私は上書きしないで配列に情報をプッシュしたいdbエントリ全体!

ありがとうございます!

答えて

2

を言うDocs

をチェックしてください。下記のMongoDBクエリを使用することができます。 MongoDBの

マングース

あなたはまた、代わりに$ addToSetの$プッシュを使用することができます
ModelName.update(
    { name: "David" }, 
    $addToSet: { 
     studenten: { 
      $each: [ 
      { 
       matrnr: 123, 
       vorname: "ABC", 
       nachname: "XYZ", 
       bewertung: [{ 
        punkte: 123 
       }] 
      }] 
     } 
); 

を使用して

db.klausur.update(
    { name: "David" }, 
    $addToSet: { 
     studenten: { 
      $each: [ 
      { 
       matrnr: 123, 
       vorname: "ABC", 
       nachname: "XYZ", 
       bewertung: [{ 
        punkte: 123 
       }] 
      }, 
       { 
       matrnr: 124, 
       vorname: "ABCD", 
       nachname: "XYZA", 
       bewertung: [{ 
        punkte: 1234 
       }] 
      }] 
     } 
); 

を使用して

。 $ addToSetは重複挿入の問題を処理します。単一の生徒オブジェクトを追加して、$を使わないで上記のクエリを使用したい場合はもう1つ。たとえば

db.klausur.update(
    { name: "David" }, 
    $addToSet: { 
     studenten: { 
       matrnr: 123, 
       vorname: "ABC", 
       nachname: "XYZ", 
       bewertung: [{ 
        punkte: 123 
       }] 
     } 
    } 
); 
1

更新対象のオブジェクトをネイティブのmongoDB更新クエリに渡します。

疑似クエリは、 db.model.update(selector、objectToUpsert)です。あなたは新入生の配列を挿入したい場合は

db.student.update(
    { name: "David" }, 
    { 
     name: "Will", 
     marks: 75, 
     grade: A 
    }, 
    { upsert: true } 
) 
1

まずKlausur =試験を見つけることが

Klausur.findOne({_id:sample_id}).exec(function (error, closure){ 
    closure.students.push(newstudentobject); 
    closure.save(); 
    }) 
+0

私はあなたが学生の配列に新しいレコードを保存するために検索し、次に押す必要はないと思います。 1つの更新クエリチェックを使用してこれを処理できます。https://docs.mongodb.com/manual/reference/operator/update/addToSet/ –

関連する問題