我需要在模式的属性中存储多个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数据库。当用户从前端提交数据时,日期和状态就会出现。所以我很难写我的职位要求。欢迎任何类型的评论/建议/更改模型结构。谢谢。
答案 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));