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

时间:2016-05-12 11:03:54

标签: javascript node.js mongodb express mean-stack

所以我有一个通过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”(学生)组成的表,是否可以将一个学生推到我的“studenten”而无需PUTTING(编辑)整个“Klausur”,即我想将信息推送到数组而不会覆盖整个数据库条目!

提前致谢!

3 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:1)

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

伪查询将是, db.model.update(selector,objectToUpsert);

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

答案 2 :(得分:1)

首先找Klausur =考试说

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