В коллекции (Товар) есть два документа:
[
{
"_id" : ObjectId("5af00c72cdded465976dfc41"),
"dates" : [{
"start": ISODate("2018-05-01T08:21:06.152Z")
"end": ISODate("2018-05-30T08:21:06.152Z")
}],
"minutes" : [
{
"start" : 1980, //1440*1+9*60
"end" : 8400 // 1440*5+20*60
}
]
},
{
"_id" : ObjectId("5af00c72cdded465976dfc41"),
"dates" : [],
"minutes" : [
{
"start" : 1980,
"end" : 8400
},
{
"start" : 9240,
"end" : 9720
}
]
}
]
Я хотел бы сформулировать критерий, который ищет продукт, доступный в определенный период времени, на основе дат и минут
Неделя отображается в 1440 минут, а дни недели начинаются с 0: воскресенье .... 6 суббота.
Моя проблема в том, что когда у меня даты пусто, документ 2 не возвращается, я думаю, что проблема исходит от $ eq . Я пытался $ существует , но это не работает
Документ № 1:
этот продукт будет находиться в магазине с 2018-05-01 по 2018-05-30, но только с понедельника (9 утра) до пятницы (20 вечера)
Документ № 2:
1 - этот продукт будет в магазине с понедельника (9 утра) до пятницы (20 вечера)
{
"start" : 1980, //1440*1+9*60
"end" : 8400 // 1440*5+20*60
}
2- затем в субботу с 10 до 18 часов
{
"start" : 9240, // 1440*6+10*60
"end" : 9720 // 1440*6+18*60
}
Мои критерии:
const minutesInWeek = date.days() * 1440 + date.hours() * 60 + date.minutes();
this.pModel.
find({
$and: [
{ minutes : {
$elemMatch: {
$or : [
{ minutes: {$eq: [ ]} },
{ $and: [{start: { $lte: minutesInWeek }}, {end: { $gt: minutesInWeek }} ] }
]
}
}},
{ dates : {
$elemMatch: {
$or : [
{ dates: {$eq: [ ]} },
{ $and: [{start: { $lte: new Date() }}, {end: { $gt: new Date() }} ] }
]
}
}}
]
});;
Буду очень признателен за помощь, спасибо!