MongoDB aggreagte füllen fehlende Tage

9

Ich habe eine Produktsammlung mit folgenden Dokumenten:

%Vor%

Ich möchte ein Diagramm zeichnen, das die Produktanzahl pro Tag beschreibt. Daher verwende ich das mongodb-Aggregationsframework, um die Produktgruppe nach Tag zu zählen:

%Vor%

Das Ergebnis in der Mongo-Shell ist:

%Vor%

Natürlich gibt es an manchen Tagen kein Produkt und das Diagramm, das den obigen Ergebnissatz verwendet, sieht so aus:

Aber das gewünschte Diagramm sollte so aussehen:

Die Frage ist also: Wie kann ich der Ergebnismenge fehlende Tage (zB der letzten 30 Tage) mit count = 0 hinzufügen? Das heißt, die gewünschte Ergebnismenge sollte aussehen das:

%Vor%     
Đức Nguyễn 16.10.2014, 14:29
quelle

2 Antworten

6

Wenn Sie aggregieren verwenden, um diese Frage vollständig zu bearbeiten, ist das ein Schmerz.
Aber es kann erreicht werden.
(MongoDB V2.6 + erforderlich)

%Vor%

Ich möchte den fehlenden Teil am Ende der Anwendung so etwas für Ihre Referenz füllen:

%Vor%     
Wizard 19.10.2014, 05:25
quelle
2

Ok, zuallererst: Nicht existierende Werte werden nach null ausgewertet "nada", "nichts", "nicht da"), was ungleich 0 ist, was ein wohldefinierter Wert ist.

MongoDB hat zum Beispiel kein semantisches Verständnis für den Unterschied zwischen 0 und 42. Wie sollte MongoDB entscheiden, welchen Wert man für einen Tag in der Zeit annehmen soll (von welchem ​​Mongo auch kein semantisches Verständnis hat)?

Grundsätzlich haben Sie zwei Möglichkeiten: Speichern Sie eine 0 für jeden Tag, wenn kein Wert aufgezeichnet werden soll, oder wiederholen Sie in der App über die Tage in der Zeit, zu der Sie ein Diagramm erstellen möchten, und geben Sie 0 für jeden Tag aus, an dem kein Wert vorhanden ist als Ersatz. Ich schlage vor, das erstere zu tun, da dies die Verwendung des Aggregations-Frameworks ermöglichen würde.

    
Markus W Mahlberg 16.10.2014 19:32
quelle