У нас есть два разных подхода к системе планирования встреч с использованием mongodb.
1-й подход:
appointments:
{
resourceId: "string",
resourceType: "doc"/"nut"...,
userId: "string",
userName: "string",
startDate: "2020-05-18T16:00:00Z",
endDate: 2020-05-18T17:00:00Z
title: "string",
description: "string",
type: "string"/"off"
},
{
resourceId: "string",
resourceType: "doc"/"nut"...,
userId: "string",
userName: "string",
startDate: "2020-05-21T12:00:00Z",
endDate: 2020-05-21T12:30:00Z,
title: "string",
description: "string",
type: "string"/"off"
},
...
resources:
{
resourceId: "string",
resourceName: "string"
resourceType: "doc"/"nut"/"room",
autoApprove: true/false,
constantDaysOff: [sunnday]
},
{
resourceId: "string",
resourceName: "string"
resourceType: "doc"/"nut"/"room",
autoApprove: true/false,
constantDaysOff: [sunnday]
},
{
resourceId: "string",
resourceName: "string"
resourceType: "doc"/"nut"/"room",
autoApprove: true/false,
constantDaysOff: [sunnday]
}
Здесь appointments
и resources
- это разные коллекции, с образцами документов в каждой коллекции.
2-й подход:
resources:
{
resourceId: "string",
resourceName: "string",
resourceType: "doc"/"nut"...,
constantDaysOff: [sunday],
2020-05-21: [
{
startDate: "2020-05-21T12:00:00Z",
endDate: 2020-05-21T12:30:00Z,
userId: "string",
userName: "string",
title: "string",
description: "string",
type: "string"/"off"
},
{
startDate: "2020-05-21T14:00:00Z",
endDate: 2020-05-21T14:30:00Z,
userId: "string",
userName: "string",
title: "string",
description: "string",
type: "string"/"off"
}
],
2020-05-22: [
{
startDate: "2020-05-22T12:00:00Z",
endDate: 2020-05-22T12:30:00Z,
userId: "string",
userName: "string",
title: "string",
description: "string",
type: "string"/"off"
},
{
startDate: "2020-05-22T14:00:00Z",
endDate: 2020-05-22T14:30:00Z,
userId: "string",
userName: "string",
title: "string",
description: "string",
type: "string"/"off"
}
]
...
}
Здесь у нас только одна коллекция, и даты встреч являются ключевыми в коллекции. Каждый ключ даты будет содержать несколько json объектов, представляющих разные встречи в один и тот же день.
ПРИМЕЧАНИЕ:
Нет встреч более 1 дня, по этой причине startDate
и endDate
- это расчет продолжительности встречи, времени ее начала и окончания.
Нам необходимо иметь возможность наиболее эффективно выполнять запросы в соответствии с:
- get все встречи для указанного c идентификатора ресурса
- получение встреч для ресурса между двумя разными датами
- получение встреч для пользователя между разными датами
- отмена / удаление встреч
Ресурсом может быть что угодно, например, врач, тренер, комната ...
Итак, мой вопрос, какой из них будет более эффективным / выполнимым, когда речь идет о запросах mongodb?