Есть сайт, на котором я нашел задачу на практику.
Хотел сделать хранение данных через mysql, но никак не мог связать таблицы, поэтому я выбрал mongoDB. Посмотрев документацию и пару видосиков по mongoDB, я получил базовые знания.
Далее сделал такую структуру:
- массив груп;
- каждая група состоит из названия(name), студентов(students) и предметов(subjects);
- каждый студент - объект, состоящий из ID, имя(firstName) и фамилии(lastName);
- каждый предмет состоит из названия(name) и массива уроков(lessons)
- каждый урок состоит из даты(date) и оценок(marks)
- каждая оценка состоит из ID студента(studentID) и значения(value)
Пример груп в JSON формате: http://olegmisar.tk/files/data2.json
Но для вывода данных в приложении мне надо собрать все данные в другую структуру:
- массив груп
- група состоит из названия(name), массива дат(dates) и студентов(students)
- студент состоит из имя(firstName), фамилии(lastName) и оценок(marks)
- оценки - массив чисел
Пример отформатированых груп: http://olegmisar.tk/files/data3.json
Сейчас я выбираю групы из БД и групирую данные с помощью js. Использую такой код:
const MongoClient = require('mongodb').MongoClient;
const url = 'mongodb://localhost:8090';
const dbName = 'register';
(async function () {
try {
const client = await MongoClient.connect(url);
const db = client.db(dbName);
const cursor = await db.collection('groups').aggregate();
let groups = [];
while(await cursor.hasNext()) {
let group = await cursor.next();
for (let subject of group.subjects) {
let newSubject = {
name: subject.name,
dates: [],
students: []
};
for (let student of group.students) {
let index = newSubject.students.push(student) - 1;
newSubject.students[index].marks = [];
}
for (let lesson of subject.lessons) {
newSubject.dates.push(lesson.date);
for (let mark of lesson.marks) {
for (let student of newSubject.students) {
if (student._id !== mark.studentId) continue;
student.marks.push(mark.value);
}
}
}
groups.push(newSubject);
}
}
client.close();
} catch (err) {
console.error(err);
}
})();
В результате я получаю объект groups, в котором данные сгрупированые так, как мне нужно.
Вопросы:
- на сколько плох такой вариант хранения данных?
- можно ли сгрупировать эти данные при запросе к БД? Я имею ввиду aggregate/group команды
- какие есть еще варианты(структуры) хранения таких данных в БД?
- еще какие-то советы и критика приветствуются
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Какие существуют виды рекламных бордов и как выбрать подходящий?
Прошу помочь в следующей проблеме: Имеем select с набором option`овСтоит задача в выборе option, у которого value равняется переменной pack, но при этом...
Мне нужно сделать калькулятор для рассчёта стоимости видеороликаЕсть такой код: