Може би по-долу е това, което искате.
1) Създайте една колекция с брояч, например тук 1-10 за 10 дни
[
{
"date": 0
},
{
"date": 1
},
{
"date": 2
},
{
"date": 3
},
{
"date": 4
},
{
"date": 5
},
{
"date": 6
},
{
"date": 7
},
{
"date": 8
},
{
"date": 9
}
]
- Актуализирайте тази колекция и направете данните, 10 дати, като използвате $add. Тук започваме от дата „2021-08-01T00:00:00+00:00“ и ще завършим дата „2021-08-10T00:00:00 +00:00"
Тази актуализация ще го направи (q=филтърът,u=актуализацията,тук нейната конвейерна актуализация)
{
"update": "dates",
"updates": [
{
"q": {},
"u": [
{
"$addFields": {
"date": {
"$add": [
"2021-08-01T00:00:00Z",
{
"$multiply": [
"$date",
24,
60,
60000
]
}
]
}
}
}
],
"multi": true
}
]
}
Резултати в (10 дати, 1 ден разлика)
{
"_id": {
"$oid": "610c4bf99ccb15d9c9d67b55"
},
"date": {
"$date": "2021-08-01T00:00:00Z"
}
},{
"_id": {
"$oid": "610c4bf99ccb15d9c9d67b56"
},
"date": {
"$date": "2021-08-02T00:00:00Z"
}
},{
"_id": {
"$oid": "610c4bf99ccb15d9c9d67b57"
},
"date": {
"$date": "2021-08-03T00:00:00Z"
}
}
...
3)Сега имаме колекция от дати с 10 дати, всички с 1 ден разлика, ние ще направим $lookup с колекцията от поръчки
Събиране на поръчки
[
{
"_id": 1,
"date": "2021-08-01T00:00:00Z"
},
{
"_id": 2,
"date": "2021-08-01T00:00:00Z"
},
{
"_id": 3,
"date": "2021-08-05T00:00:00Z"
},
{
"_id": 4,
"date": "2021-08-03T00:00:00Z"
}
]
Заявка (вземете конвейера, първо филтрирайте желаните дати и след това се присъединете само ако поръчката е направена същия ден)
{
"aggregate": "dates",
"pipeline": [
{
"$match": {
"$expr": {
"$and": [
{
"$gte": [
"$date",
{
"$dateFromString": {
"dateString": "2021-08-01T00:00:00"
}
}
]
},
{
"$lte": [
"$date",
{
"$dateFromString": {
"dateString": "2021-08-05T00:00:00"
}
}
]
}
]
}
}
},
{
"$lookup": {
"from": "orders",
"let": {
"datesDate": "$date"
},
"pipeline": [
{
"$match": {
"$expr": {
"$eq": [
{
"$dateToString": {
"format": "%Y-%m-%d",
"date": "$$datesDate"
}
},
{
"$dateToString": {
"format": "%Y-%m-%d",
"date": "$date"
}
}
]
}
}
}
],
"as": "found-orders"
}
},
{
"$project": {
"_id": 0
}
}
],
"cursor": {},
"maxTimeMS": 1200000
}
Резултати
[
{
"date": "2021-08-01T00:00:00Z",
"found-orders": [
{
"_id": 1,
"date": "2021-08-01T00:00:00Z"
},
{
"_id": 2,
"date": "2021-08-01T00:00:00Z"
}
]
},
{
"date": "2021-08-02T00:00:00Z",
"found-orders": []
},
{
"date": "2021-08-03T00:00:00Z",
"found-orders": [
{
"_id": 4,
"date": "2021-08-03T00:00:00Z"
}
]
},
{
"date": "2021-08-04T00:00:00Z",
"found-orders": []
},
{
"date": "2021-08-05T00:00:00Z",
"found-orders": [
{
"_id": 3,
"date": "2021-08-05T00:00:00Z"
}
]
}
]
Това дава за всяка дата (за всеки ден) поръчките, които са направени през този ден. Ако на една дата не са направени поръчки, масивът е празен. Тук са само 10 дни, можете да направите като 5-годишно събиране на дати въз основа на вашите нужди.