Я относительно новичок в MongoDB, и мне интересно, каким будет "лучшее" решение для обработки следующего типа данных в моей базе данных.
Коллекции:
Обзор:
Примечание. Представьте, что реализация похожа на Duolin go или какой-либо другой учебный сайт.
Пользователи имеют все стандартное обобщенное c информация о пользователе , но они также должны отслеживать, сколько очков, выученных слов, выполненного процента и т. д., которые они имеют за каждый данный урок , которые они имеют начал.
Уроки имеют такие данные, как: изученные слова, общее количество баллов, слова для обзора и т. Д. c.
Изображение
Пример того, что пользователь будет видеть в виджете при просмотре урока, который он уже начал ...
Так какой хороший способ справиться с этим? Я чувствую, что мне понадобится как минимум коллекция для пользователей и уроков , но где я буду хранить данные этого пользователя, указанные c, относящиеся к урокам, которые они извлекли?
То, о чем я думал до сих пор ...
// user collection
const UserSchema = new mongoose.Schema({
email: { type: String, required: true, unique: true },
username: { type: String, required: true, unique: true },
password: { type: String, required: true },
firstName: { type: String },
lastName: { type: String },
gender: { type: String, enum: ['male', 'female', 'other'] },
admin: Boolean,
address: {
street: String,
city: String,
state: {
type: String,
uppercase: true,
required: true,
enum: statesArray,
},
zip: Number,
},
});
// lesson_results collection
const LessonResultsSchema = new mongoose.Schema({
user_id: Schema.Types.ObjectId,
results: [
{
id: Number,
lesson_id: Schema.Types.ObjectId,
pointsEarned: Number,
wordsLearned: Number,
wordsToPractice: [
{
id: Number,
correct: Number,
incorrect: Number,
bookmarked: Boolean,
},
],
},
],
});
// lesson collection
const LessonSchema = new mongoose.Schema({
title: String,
description: String,
totalPoints: Number,
totalWords: Number,
words: [
{
id: Number,
word: String,
points: Number
}
]
})
// if logged in
// find user in user collection
// find user's results in lessonsResults collection by using user_id
// iterate over each result to find their lesson & lesson's data
// combine data and send to frontend
// calculate percentage complete + other calculations
// render aggregate data on screen
Мне интересно, как вы решите это.
Извините, если это немного затянуто! (+ надеюсь, что примеры имеют смысл)