У меня проблемы с получением документов нужных дат из моей БД.
Моя структура базы данных выглядит примерно так:
{
date: 2019-10-24T10:00:00.000Z,
value: 6
},
{
date: 2019-10-24T10:01:03.000Z,
value: 6
},
{
date: 2019-10-24T10:02:35.000Z,
value: 6
},
...
И пытаюсь получить запрос, которыйпринимает 2 параметра:
- startDate (endDate - x дней)
- endDate
И доставляет 1 документ в день между startDate и endDate, этот документ необходимчтобы время (ЧЧ: мм: сс) было ближе к концу endDate. Примерно так:
start = new Date('2019-10-22T10:00:00.000Z')
end = new Date('2019-10-24T10:00:00.000Z)
{
date: '2019-10-22T09:59:13.000Z',
value: 10
},
{
date: '2019-10-23T10:00:00.000Z',
value: 17
},
{
date: '2019-10-24T09:58:55.000Z',
value: 10
}
Прямо сейчас у меня есть эта агрегатная функция, которая получает мне первый документ каждого дня:
.aggregate([
{
$match: {
date: { $gte: ISODate('2019-05-26T12:00:00.000Z'), $lte: ISODate('2019-10-26T12:00:00.000Z') }
}
},
{
$project: {
_id: 1,
value: 1,
docDate: '$date',
day: {
'$dayOfMonth': '$date'
},
month: {
'$month': '$date'
},
year: {
'$year': '$date'
}
}
},
{
$project: {
_id: 1,
value: 1,
docDate: 1,
date: {
'$concat': [
{
$substr: ['$year', 0, 4]
},
'-',
{
$substr: ['$month', 0, 2]
},
'-',
{
$substr: ['$day', 0, 2]
}
]
}
}
},
{
$group: {
_id: '$date',
objId: {
$first: '$_id'
},
value: {
$first: '$value'
},
date: {
$first: '$docDate'
}
}
},
{
$project: {
_id: '$objId',
value: 1,
date: 1
}
},
{
'$sort': {
date: 1
}
}
]
)