Ich versuche, eine Aggregation Abfrage mit Kolben-mongoengine zu machen, und von dem, was ich gelesen habe, es klingt nicht wie es möglich ist.Flask-MongoEngine & PyMongo Aggregation Abfrage
Ich habe mehrere Forum-Threads, E-Mail-Ketten und ein paar Fragen zu Stack Overflow angeschaut, aber ich habe kein wirklich gutes Beispiel dafür gefunden, wie man Aggregation mit Flask-Mongoengine implementiert.
Es gibt einen Kommentar in this question ist die sagt, Sie verwenden müssen „raw pymongo und Aggregation-Funktionalität.“ Es gibt jedoch keine Beispiele dafür, wie das funktionieren könnte. Ich habe mit Python gebastelt und habe eine grundlegende Anwendung auf mit Flask Rahmen, aber Eintauchen in vollwertiges Anwendungen & Verbindungs-/Abfrage zu Mongo ist ziemlich neu für mich.
Kann jemand ein Beispiel (oder einen Link zu einem Beispiel) geben, wie ich meine Kolben-Mongoengine-Modelle verwenden könnte, aber Abfrage mit dem Aggregations-Framework mit PyMongo? benötigen diese zwei Verbindungen zu MongoDB (eine für PyMongo die Aggregation Abfrage und eine zweite für die regelmäßige Abfrage/Insert/Update über MongoEngine ausführen)?
Ein Beispiel für die Aggregation Abfrage durchführen möchte ich wie folgt (diese Abfrage wird mir genau die Informationen, die ich in der Mongo Shell wollen):
db.entry.aggregate([
{ '$group' :
{ '_id' : { 'carrier' : '$carrierA', 'category' : '$category' },
'count' : { '$sum' : 1 }
}
}
])
Ein Beispiel für die Ausgabe dieser Abfrage:
{ "_id" : { "carrier" : "Carrier 1", "category" : "XYZ" }, "count" : 2 }
{ "_id" : { "carrier" : "Carrier 1", "category" : "ABC" }, "count" : 4 }
{ "_id" : { "carrier" : "Carrier 2", "category" : "XYZ" }, "count" : 31 }
{ "_id" : { "carrier" : "Carrier 2", "category" : "ABC" }, "count" : 6 }
Awesome! Vielen Dank. Das hat mir Kopfschmerzen bereitet, als ich versuchte eine Lösung zu finden. Ich habe mit der Methode "_get_collection()" getestet und konnte die Ausgabe von Mongo erhalten. – SirCobalt
Brilliant Antwort !! Wenn Sie die Klausel group by nur für bestimmte Datensätze ausführen möchten, können Sie den Operator $ match wie folgt verwenden: 'Model._get_collection(). Aggregate ([ { '$ match' : qs._query, }, {'$ group': {'_id': {'carrier': '$ carrierA', 'Kategorie': '$ category'}, 'count': {'$ sum ': 1} } } ]) ' wo qs eine Instanz von MongoEngine queryset ist. – Yahya