derjulezzz
derjulezzz

Reputation: 31

Push data to MongoDB without editing the whole entry in MEAN

So i've got a single page application running via MEAN Stack. I've got the following scheme/model for a Klausur (Klausur is german for exam, i want to manage exams).

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
        }]
    }
);

Multiple users can edit the entrys, otherwise i would just overwrite the entry. I want to have a table consisting of the "studenten" (students), is it possible to PUSH one student to my "studenten" without PUTTING (edit) the whole "Klausur", i.e. I want to push information to an array without overwriting the whole db entry!

Thanks in advance!

Upvotes: 1

Views: 65

Answers (3)

Jahanzaib Aslam
Jahanzaib Aslam

Reputation: 2834

Please Check Docs

If you want to insert new students array. you can use below mentioned MongoDB query.

Using MongoDB

 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
                }]
            }]
        }
);

Using Mongoose

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

you can also use $push instead of $addToSet. but $addToSet handle duplicates insertion issue. One more thing if you want to add single student object then just use above query without $each. for example

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

Upvotes: 2

kapil
kapil

Reputation: 11

First find Klausur=exam say

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

Upvotes: 1

Vinay
Vinay

Reputation: 558

Pass an object to be updated to native mongoDB update query.

The pseudo query will be, db.model.update(selector, objectToUpsert);

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

Upvotes: 1

Related Questions