Я новичок в использовании javascript. Это мой первый настоящий проект, над которым я работаю самостоятельно. Я не смог найти ответа на свой вопрос. Я где-то читал, что когда речь идет об отношениях «один ко многим», «многие» должны иметь ссылку на «один». В настоящее время я делаю это наоборот, когда «один» содержит массив «многие». Схема из моего проекта:
Схема салона:
const salonSchema = new Schema({
name: {
type: String,
required: true
},
email: {
type: String,
required: true
},
password: {
type: String,
required: true
},
description: {
type: String,
required: true
},
workingHours: {
type: String,
required: true
},
workingDays: [
{
type: String,
required: true
}
],
coordinates: {
type: String,
required: true
},
images: [
{
type: String
}
],
company: {
type: Schema.Types.ObjectId,
ref: 'Company'
},
employees: [
{
type: Schema.Types.ObjectId,
ref: 'Employee'
}
],
bookings: [
{
type: Schema.Types.ObjectId,
ref: 'Booking'
}
]
});
Схема бронирования:
const bookingSchema = new Schema({
user: {
type: Schema.Types.ObjectId,
ref: 'User',
required: true
},
salon: {
type: Schema.Types.ObjectId,
ref: 'Salon',
required: true
},
employee: {
type: Schema.Types.ObjectId,
ref: 'Employee',
required: true
},
service: {
type: Schema.Types.ObjectId,
ref: 'Service'
},
dateFrom: {
type: Date,
required: true
},
dateTo: {
type: Date,
required: true
},
price: {
type: Number,
required: true
},
bookingType: {
type: String,
required: true
},
isAccepted: {
type: Boolean,
default: false
},
isCancelled: {
type: Boolean,
default: false
},
isComplete: {
type: Boolean,
default: false
}
});
Мой вопрос: нужно ли менять отношения? это плохая практика? Что касается взаимоотношений с сотрудниками, я не вижу в этом проблем, однако меня интересуют заказы. Поскольку я не удаляю их после того, как они были завершены для статистических целей, количество бронирований будет продолжать расти. Меня беспокоит, сколько времени у находки уйдет на просмотр всех документов о бронировании. Разве не было бы лучше иметь заказы, связанные с салоном, в массиве и заполнять их, а не использовать поиск во всей коллекции Booking. В обоих случаях код будет выглядеть примерно так:
Использование populate:
const salon = await Salon.findById({ _id: req.id })
.populate({ path: 'bookings', populate: { path: 'employee user service' } });
Использование find:
const bookings = await Booking.find({ salon: req.id });