Вы можете рассмотреть несколько вещей:
Я бы сказал, не хранить период времени в формате String
, потому что запрос может быть сложным, скажем, когда вы запрашиваете документы с workingDayStartAt
при 10:00 am
и workingDayEndAt
при 12:00 pm
это было бы невозможно при втором подходе, так как передача этих значений и сопоставление со строкой не легки. Так что нет Второй .
Так как вы остались с Первый подход { "workingDayStartAt: "9:00", "workingDayEndAt: "18:00" }
. Но у меня есть несколько предложений:
a) Не храните числа в виде строк в базе данных, всегда храните числа в виде целых чисел в MongoDB, что очень вам помогает при выполнении запросов. Дополнительное числовое поле с индексом не требует больших затрат по сравнению со сравнением строк при выполнении запросов (Это может быть проблемой, если ваш do c слишком большой / слишком много индексов или размер коллекции слишком большой - в общем / большинстве случаев это не так вопрос).
б) А вы, что если в будущем у вас будут разные периоды времени для разных дней в неделе? - Так что, если это может произойти, вам нужно хранить данные в течение дня, у вас может быть что-то вроде ниже:
Поле timePeriods
:
{
timePeriods : { /** This can be an array of objects as well */
"0": [{ workingDayStartAt: 900, workingDayEndAt: 1800 }], /** Instead of array it can be an object */
"1": [{ workingDayStartAt: 1000, workingDayEndAt: 1800 }],
"2": [{ workingDayStartAt: 1100, workingDayEndAt: 1800 }],
"3": [{ workingDayStartAt: 1130, workingDayEndAt: 1800 }],
"4": [{ workingDayStartAt: 930, workingDayEndAt: 1800 }],
"5": [{ workingDayStartAt: 1000, workingDayEndAt: 1800 }],
"6": [{ workingDayStartAt: 1200, workingDayEndAt: 1800 }],
}
}
/** Just in case if you've two different start & end hours on same day */
"0": [{ workingDayStartAt: 0900, workingDayEndAt: 1100 }, { workingDayStartAt: 1300, workingDayEndAt: 1800 } ]
/** Or if you've same times everyday
* (You can just say `'0_7': {exists : true}` to check if all days have same times & check for docs with particular times)*/
{
timePeriods : {
"0_7": [{ workingDayStartAt: 900, workingDayEndAt: 1800 }]
}
}