#node.js #mongodb #express #mongoose #nosql
#node.js #mongodb #выразить #мангуст #nosql
Вопрос:
В моей базе данных nosql есть две модели (MongoDB и mongoose.js ): Пользователь и класс.
В каждом классе один учитель и много учеников (учитель и ученики — это модель пользователя).
и у каждого пользователя может быть много классов.
Какое лучшее решение для реализации базы данных?
Я думаю, что лучше всего иметь массив user_id
внутри модели класса и массив class_id
в модели пользователя, я прав?
предположим, что пользователь teacher не может быть как student, а пользователь student также не может быть как teacher.
Комментарии:
1. @AndrewLi Это всего лишь отношение «многие ко многим» в моей базе данных, и я должен использовать nosql.
Ответ №1:
Вы можете использовать mongoose ref
(см. документы) в своих схемах. Например:
const UserSchema = new mongoose.Schema({
firstName: String,
lastName: String,
// other properties you want to define
classes: [
{
type: mongoose.Schema.Types.ObjectId,
ref: "Class"
}
]
})
const ClassSchema = new mongoose.Schema({
className: String,
// other properties you want to define
users: [
{
type: mongoose.Schema.Types.ObjectId,
ref: "User"
}
]
})
Позже при запросе базы данных вы можете использовать «Заполнить» mongoose для автоматического получения документов, на которые ссылаются, вместо просто идентификатора документа:
User.findById(userId).populate("classes");
Class.findById(classId).populate("users");
Вот хороший учебник, который объясняет это более подробно:
https://bezkoder.com/mongodb-many-to-many-mongoose /
Комментарии:
1. Это не ответ на мой вопрос. Я знаю, как это реализовать. Мне нужно знать, является ли это решение лучшим для этой базы данных?
2. Afaik, это правильный путь, если вам нужно сделать это в mongodb. Прочитайте раздел «Ссылки или встраивание для отношений MongoDB «Многие ко многим» в связанной статье — на мой взгляд, это довольно хорошо объясняет 🙂