Этот лог c будет зарезервирован для нескольких команд javascript и mon goose, это действительно ваше дело, но я бы порекомендовал что-то вроде следующего:
Ваша схема в порядке, когда пользователь идет, чтобы проверить книгу, вы должны сначала проверить, доступна ли она.
Вы можете сделать это, извлекая и раскручивая текущие даты в свои собственные массивы. Это также сортирует даты по порядку.
var datesIn = {};
Book.aggregate([
{$unwind: '$availability'},
{$sort: {'availability.moveIn': 1}}
], function (err, result) {
datesIn = result;
});
Сделайте это снова для дат:
var datesOut = {};
Book.aggregate([
{$unwind: '$availability'},
{$sort: {'availability.moveOut': 1}}
], function (err, result) {
datesIn = result;
});
Индекс каждого из этих массивов теперь соответствует времени извлечения пользователем , Если он пуст, он доступен, в противном случае вы можете использовать библиотеку, например момент. js, чтобы сравнить доступность дат.
Вот хороший пост об этом: Проверьте, находится ли одна дата между двумя датами
Наконец, как только вы найдете доступность, вы можете нажать sh в новая проверка, например:
Books.findOneAndUpdate({'Searching criteria goes here'}, {
$push : {
availability : {
"moveIn": firstDate,
"moveOut": secondDate,
"qty": quantityVal
}
}
});
Это должно добавить к массиву availability
в вашем документе.
ПРИМЕЧАНИЕ
Я уверен, что вы слышали о не изобретать заново колесо, есть несколько хороших библиотек для подобных вещей, вот что я нашел:
https://www.npmjs.com/package/availability-schedule
, похоже, имеет функцию isAvailable (startDate, endDate)
, :)