2013-07-31 8 views
6

Ich habe eine MySQL-Tabelle mit Aufzeichnungen der Namen der Personen und der Zeitpunkt der Ankunft als eine Zahl ausgedruckt. Betrachten Sie es als einen Marathon. Ich möchte wissen, wie viele Menschen in einem gewissen Abstand von Zeit gekommen, die die gleichen sind, so benannt, wo:Migrieren zu MongoDB: wie Abfrage GROUP BY + WHERE

SELECT name, COUNT(*) FROM mydb.mytable 
WHERE Time>=100 AND Time<=1000 
GROUP BY name 

Und als Ergebnisse erhalte ich:

Susan, 1 
John, 4 
Frederick, 1 
Paul, 2 

Ich bin jetzt zu MongoDB migrieren, und mit Python zu programmieren (also ich frage nach Pymongo Hilfe). Ich habe versucht, nach Informationen über die GROUP BY-Entsprechung zu suchen (selbst wenn ich gelesen habe, dass NoSQL-Datenbanken bei dieser Art von Operation schlechter sind als die SQL-Datenbanken), aber seit sie die neue agreggate-API veröffentlicht haben, konnte ich keine finden einfaches Beispiel wie dieses gelöst mit der Gruppenmethode, der Map-Reduce Methode oder der brandneuen agreggate API.

Irgendwelche Hilfe?

Antwort

17

Es gibt Beispiele dafür in der gesamten Dokumentation, Google und dieser Website.

Einige Referenzen:

Und für einige Code:

self.db.aggregate(
    # Lets find our records 
    {"$match":{"Time":{"$gte":100,"$lte":1000}}}, 

    # Now lets group on the name counting how many grouped documents we have 
    {"$group":{"_id":"$name", "sum":{"$sum":1}}} 
) 
+0

Ich denke, dass $ name verwendet, ist, was mich gemacht Zweifel wie es geht, da name ist der name des feldes in der datenbank, kein pymongo tag. Warum wird der Name des zu gruppierenden Feldes so ausgedrückt? –

+1

@RomanRdgz Wenn ich ehrlich bin, weiß ich nicht, es war eine Designentscheidung, über die man 10gen fragen müsste, aber ohne das '$' wird die Zeichenkette innerhalb von MongoDB als Literal behandelt, es ist das '$' MongoDB reagiert, als wäre es ein Feldwert – Sammaye