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

Push data to MongoDB without editing the whole entry in MEAN

本文关键字:MEAN 编辑 数据 MongoDB      更新时间:2023-09-26

所以我有一个通过MEAN Stack运行的单页应用程序。我有以下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"(学生)组成的表,是否可以将一个学生推送到我的"studentn",而不必推送(编辑)整个"Klausur",即我想要将信息推送到数组,而不覆盖整个数据库条目!

提前感谢!

请检查单据

如果要插入新学生数组。您可以使用下面提到的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
                }]
            }]
        }
);

使用Mongoose

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

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

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

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

首先找到Klausur=考试说

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