如何将多个JSON对象插入模式的一个属性?

时间:2018-10-24 08:00:25

标签: node.js mongodb mongoose mongoose-schema

我需要在模式的属性中存储多个JSON对象。 以这个例子...

     const Schema = require("mongoose").Schema;

     const Student= Schema({
        student_id: String,
        name:String
        attendance:[
                  { 
                 date: Date,
                 Status: String
                   }
                ]
        });

我需要插入看起来像这样的单个学生的出勤。.

       student_id: student_001,
        name:'Joe'
        attendance:[
                     { 
                      date: 24-10-2018,
                      status: 'Present'
                     },
                     { 
                      date: 25-10-2018,
                      status: 'Absent'
                     },
                  //list goes on
                   ]

我正在使用NodeJs作为后端,使用EJS模板作为前端和mongodb数据库。当用户从前端提交数据时,日期和状态就会出现。所以我很难写我的职位要求。欢迎任何类型的评论/建议/更改模型结构。谢谢。

2 个答案:

答案 0 :(得分:1)

我建议您将模型结构更改为normalized。 这将改善您在以后的统计信息查询中的体验。

另外,还有一个建议-不要在mongoDB中使用字符串标识符,这可能会在保持其唯一性方面引起头痛。 Mongo已自动为每个文档分配了_id属性,如果需要标识任何对象,可以使用它。

考虑我的建议-代码如下:

const Schema = require("mongoose").Schema;

const Student = Schema({
    name: String
});

const Attendance = Schema({
    date: Date,
    status: String,
    student_id: {
        type: Schema.Types.ObjectId,
        ref: 'Student'
    }
})

然后,您可以简单地创建分配给学生的出勤记录:

const attendance = new AttendanceModel({
    date: new Date('05/20/2018'),
    status: "present",
    student_id: "somestudentid"
});

答案 1 :(得分:1)

您可以创建一个单独的出勤模式。

const Schema = require("mongoose").Schema;

const AttendanceSchema = new Schema({ 
                             date: Date,
                             status: String
                         });

const StudentSchema = new Schema({
    student_id: String,
    name:String
    attendance:[AttendanceSchema]
});

const Student = mongoose.model('Student', StudentSchema);

添加新学生。

let newStudent = new Student({
        student_id: student_001,
        name:'Joe'
});
newStudent.save();

更新出席人数:

let att1 =  { 
               date: 24-10-2018,
               status: 'Present'
           };

// Here 'id' is id of particular student.
Student.update({ _id: id }, { $push: { attendance: att1 } })
    .then(() => console.log("Success"))
    .catch(err => console.log(err));

稍后某个时刻:

let att2 =   { 
                  date: 25-10-2018,
                  status: 'Absent'
             };

// Here 'id' is id of particular student.
Student.update({ _id: id }, { $push: { attendance: att2 } })
    .then(() => console.log("Success"))
    .catch(err => console.log(err));