Sie müssen $sort
Ihr Dokument nach $unwind
und verwenden Sie den $first
im $group
Bühne. Sie können auch den $last
-Operator verwenden. In diesem Fall müssen Sie Ihre Dokumente sortieren in aufsteigender Reihenfolge
welches produziert:
%Vor% Um die maximale Gehalts- und Mitarbeiterliste für jede Abteilung zurückzugeben, müssen Sie die $max
$push
Akkumulatoroperator, um eine Liste von "Name" und "Gehalt" für alle Mitarbeiter für jede Gruppe zurückzugeben. Von dort müssen Sie den $map
-Operator in Ihrem $project
Phase, um neben dem Höchstgehalt eine Liste von Namen zurückzugeben. Natürlich wird hier der $cond
verwendet, um das Gehalt jedes Mitarbeiters mit dem Höchstwert zu vergleichen. Der $setDifference
erledigt seine Arbeit, die alle false
ausfiltert und in Ordnung ist solange die zu filternden Daten "eindeutig" sind. In diesem Fall sollte es "in Ordnung" sein, aber wenn zwei Ergebnisse den gleichen "Namen" enthielten, würde es die Ergebnisse verzerren, wenn man die beiden als eins betrachtet.
was ergibt:
%Vor% Es ist nicht die intuitivste Sache, aber statt $max
sollten Sie $sort
und $first
verwenden:
Alternativ denke ich, dass dies mit dem $$ROOT
-Operator möglich ist ( faire Warnung: Ich habe das nicht wirklich versucht) -
Tags und Links mongodb aggregation-framework mongodb-query