Ich spiele mit MongoDB herum und versuche herauszufinden, wie man ein einfaches macht
SELECT province, COUNT(*) FROM contest GROUP BY province
Aber ich kann es nicht mit der Aggregatfunktion herausfinden. Ich kann es mit einer wirklich seltsamen Gruppensyntax machen
db.user.group({
"key": {
"province": true
},
"initial": {
"count": 0
},
"reduce": function(obj, prev) {
if (true != null) if (true instanceof Array) prev.count += true.length;
else prev.count++;
}
});
Aber gibt es eine einfachere / schnellere Möglichkeit, die Aggregatfunktion zu verwenden?
"errmsg" : "exception: A pipeline stage specification object must contain exactly one field.",
?{ $sort: { count: -1 } }
Ich benötige eine zusätzliche Operation basierend auf dem Ergebnis der Aggregatfunktion. Schließlich habe ich eine Lösung für die Aggregatfunktion und die Operation gefunden, die auf dem Ergebnis in MongoDB basiert. Ich habe eine Sammlung
Request
mit Feldrequest, source, status, requestDate
.Einzelfeldgruppe nach & Anzahl:
Mehrere Felder gruppieren nach & Anzahl:
Mehrere Felder gruppieren nach & Anzahl mit Sortieren nach Feld:
Mehrere Felder gruppieren nach & Anzahl mit Sortieren mit Anzahl:
quelle
Wenn Sie mehrere Spalten zum Gruppieren benötigen, folgen Sie diesem Modell. Hier zähle ich durch
status
undtype
:quelle
Wenn Sie die Gruppierung einschränken müssen, können Sie außerdem Folgendes verwenden:
quelle
Ab MongoDB 3.4 können Sie die
$sortByCount
Aggregation verwenden.https://docs.mongodb.com/manual/reference/operator/aggregation/sortByCount/
Beispielsweise:
quelle
$sortByCount
tatsächlich ein "Pseudooperator" ist, wie mehrere weitere Aggregationsstufenoperatoren, die aus MongoDB 3.4 eingeführt wurden. Alles, was sie wirklich tun, ist , in ihre jeweiligen Aggregationsstufen zu expandieren . In diesem Fall ein$group
mit$sum: 1
wie in vorhandenen Antworten gezeigt und eine zusätzliche$sort
Stufe. Sie bieten keinen anderen Vorteil als "weniger Code eingeben" , was möglicherweise aussagekräftiger ist oder nicht (wenn Sie sich für solche Dinge interessieren). Meiner Meinung nach sind unterschiedliche$group
und$sort
Stufen im Code weitaus aussagekräftiger und in der Tat flexibler.Diese Art der Abfrage hat bei mir funktioniert:
Siehe http://docs.mongodb.org/manual/tutorial/aggregation-with-user-preference-data/
quelle
Mongo Shell Befehl, der für mich funktioniert hat:
quelle