есть Users в них есть массив eDates:
"eDates" : [
{
"dateFrom" : ISODate("2017-04-01T12:33:50.000+0000"),
"dateTo" : ISODate("2017-04-05T12:33:50.000+0000"),
"_id" : ObjectId("58c2ab50875060766968d41d")
},
{
"dateFrom" : ISODate("2017-10-01T12:34:04.000+0000"),
"dateTo" : ISODate("2017-10-07T12:34:04.000+0000"),
"_id" : ObjectId("58c2ab50875060766968d41c")
}, ...
],
Мне нужно отфильтровать по дате юзеров в которых хоть 1 элемент с массива совпадает с заданным фильтром.
Т.е. я заполняю dateFrom и dateTo и ищу
let nested = []
let from = {"range" : {"eDates.dateFrom" : {"gt": new Date(data.dateFrom)} }};
let to = {"range" : {"eDates.dateTo" : {"lt": new Date(data.dateTo)} }};
nested.push(from, to);
"filter": {
"nested" : {
"path" : "eDates",
"query" : {
"bool" : {
"must" : nested
}
}
}
}
Проблема в том что оно может находить совпадения в разных саб. обьектах а не точно в 1.
По аналогу как делает это в mongo:
{ "eDates": { $elemMatch: {dateFrom: {$gte: ISODate("2016-04-04T00:00:00.000Z") }, dateTo: {$lte: ISODate("2017-04-27T00:00:00.000Z")} } } }