Как вставить несколько объектов JSON в одно свойство схемы? - PullRequest
0 голосов
/ 24 октября 2018

У меня есть требование хранить несколько объектов 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
                   ]

Я использую NodeJ в качестве Backend, шаблон EJS в качестве внешнего интерфейсаи база данных mongodb.Дата и статус появляются, когда пользователь отправляет данные из внешнего интерфейса.Так что мне трудно писать свой почтовый запрос.Любые типы комментариев / предложений / изменения структуры модели приветствуются.Спасибо.

Ответы [ 2 ]

0 голосов
/ 24 октября 2018

Вы можете создать отдельную схему посещаемости.

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));
0 голосов
/ 24 октября 2018

Я предлагаю вам изменить структуру модели, чтобы она была нормализована .Это улучшит ваш опыт в будущих статистических запросах.

Кроме того, еще одно предложение - не используйте строковые идентификаторы в 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"
});
...