Mungo - Wie gruppieren und füllen?

9

Ich benutze MongoDB und Mongoose als meine ODM und ich versuche eine Abfrage mit populate und group by in der gleichen Anweisung zu machen.

Hier sind meine einfachen Dokumente Modelle:

%Vor%

Ich versuche nur, alle Nachrichten für einen Benutzer zu erhalten, gruppiere es mit jedem Benutzer, mit dem er spricht. Ich habe es so versucht:

%Vor%

Leider hat mein Modell leider keine group Methode. Haben Sie eine Lösung, um das zu erreichen?

Danke.

    
Jeffrey Muller 10.08.2014, 17:05
quelle

2 Antworten

11

Beispiel, das $ lookup populate verwendet, wird als ein Array aufgefüllt, daher das $ unload.

%Vor%     
raubas 21.10.2016, 11:14
quelle
9

Die bessere Option, die Sie hier verwenden können, ist .aggregate() , was im Gegensatz zu den .group() Methode von MongoDB, die die JavaScript-Engine verwendet, um Ergebnisse zu verarbeiten.

Methoden wie .populate() werden jedoch nicht direkt unterstützt, und dies ist beabsichtigt, da die Aggregationspipeline und andere Methoden keine Antwort zurückgeben, die auf dem aktuellen Modellschema basiert. Da es falsch wäre anzunehmen, dass Sie das tun, ist es nur eine Antwort auf ein Rohobjekt.

Es gibt jedoch nichts, was Sie davon abhält, die Antwort als Mungo-Dokumente zu "werfen" und dann das Modellformular von % aufzurufen. co_de% mit den erforderlichen Pfaden:

%Vor%

Das bringt natürlich nur die .populate() Nachricht von jedem "von", wie es vom Operator angedeutet wird.

Vielleicht ist das, was Sie wirklich mit "Gruppe von" meinen, eigentlich "sortieren":

%Vor%

Da Ihr Kontext "Alle Nachrichten" enthält und nicht etwas, das sonst von einem Gruppierungsoperator impliziert würde, wie beispielsweise mit $first oder der .aggregate() -Auflistungsmethode. So gruppieren sich die Nachrichten über die Sortierung und nicht irgendeine Gruppierung.

Letzteres klingt nach dem, was Sie wirklich fragen, aber wenn Sie tatsächlich eine echte "Gruppierung" beabsichtigten, dann gibt es das Aggregationsbeispiel zusammen mit der Verwendung von .group() .

    
Neil Lunn 11.08.2014 00:49
quelle