Kanske är bälgen det du vill ha.
1)Skapa en samling med en räknare till exempel här 1-10 i 10 dagar
[
{
"date": 0
},
{
"date": 1
},
{
"date": 2
},
{
"date": 3
},
{
"date": 4
},
{
"date": 5
},
{
"date": 6
},
{
"date": 7
},
{
"date": 8
},
{
"date": 9
}
]
- Uppdatera den här samlingen och gör data, 10 datum med $add. Här börjar vi från datum "2021-08-01T00:00:00+00:00" och vi kommer att avsluta datumet "2021-08-10T00:00:00 +00:00"
Denna uppdatering kommer att göra det(q=filtret,u=uppdateringen,här dess pipelineuppdatering)
{
"update": "dates",
"updates": [
{
"q": {},
"u": [
{
"$addFields": {
"date": {
"$add": [
"2021-08-01T00:00:00Z",
{
"$multiply": [
"$date",
24,
60,
60000
]
}
]
}
}
}
],
"multi": true
}
]
}
Resultat i (10 datum, 1 dags skillnad)
{
"_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) Nu har vi datuminsamlingen med 10 datum, alla med 1 dags skillnad kommer vi att göra en $uppslagning med orderinsamlingen
Beställningsinsamling
[
{
"_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"
}
]
Fråga (ta pipelinen, filtrera först de önskade datumen och gå sedan med endast om beställningen görs samma dag)
{
"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
}
Resultat
[
{
"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"
}
]
}
]
Detta ger för varje datum (för varje dag), beställningarna som gjordes den dagen. Om ett datum inga beställningar gjordes är arrayen tom. Här är bara 10 dagar, du kan göra ungefär 5 års datuminsamling baserat på dina behov.