Вы можете использовать оператор $range
(аналогично for
l oop). Основная идея:
for(i=0; i<difference(endDate - startDate); i++){
startDate + (i * `24 * 60 * 60 * 1000`)
}
difference(endDate - startDate)
возвращает разницу во времени в миллисекундах, поэтому нам нужно разделить 24 * 60 * 60 * 1000
db.collection.aggregate([
{
$addFields: {
range: {
$range: [
0,
{
$add: [
{
$divide: [
{
$subtract: [
"$endDate",
"$startDate"
]
},
{
$multiply: [
24,
60,
60,
1000
]
}
]
},
1
]
},
1
]
}
}
},
{
$project: {
_id: 0,
result: {
$map: {
input: "$range",
in: {
$add: [
"$startDate",
{
$multiply: [
"$$this",
24,
60,
60,
1000
]
}
]
}
}
}
}
}
])
{
"result" : [
ISODate("2020-01-07T00:00:00.000Z"),
ISODate("2020-01-08T00:00:00.000Z"),
ISODate("2020-01-09T00:00:00.000Z"),
ISODate("2020-01-10T00:00:00.000Z")
]
}