将数据推送到 MongoDB 而无需编辑 MEAN 中的整个条目

Push data to MongoDB without editing the whole entry in MEAN

所以我通过 MEAN Stack 获得了一个单页应用程序 运行。我有以下 scheme/model 的 Klausur(Klausur 是德语考试,我想管理考试)。

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

多个用户可以编辑条目,否则我会直接覆盖条目。我想要一个由 "studenten"(学生)组成的 table,是否可以将一个学生推送到我的 "studenten" 而无需 PUTTING(编辑)整个 "Klausur",即我想在不覆盖整个数据库条目的情况下将信息推送到数组!

提前致谢!

将要更新的对象传递给本机 mongoDB 更新查询。

伪查询将是, db.model.update(选择器, objectToUpsert);

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

先找Klausur=exam说

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

请勾选Docs

如果要插入新的学生数组。您可以使用下面提到的 MongoDB 查询。

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

使用猫鼬

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

您也可以使用 $push 代替 $addToSet。但 $addToSet 处理重复插入问题。还有一件事,如果你想添加单个学生对象,那么只需使用上面的查询而不使用 $each。例如

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