2016-07-01 3 views
2

Ich mache eine Website, um mongoDB Daten zu erkunden. In meiner Datenbank speichern ich GPS-Messungen von Smartphones. Ich verwende verschiedene Abfragen, um diese Messungen zu untersuchen. Ich habe eine Abfrage, die nach Tagen gruppiert und die Messungen zählt. Eine weitere Abfrage zählt die Anzahl der Messungen für jede Art von Smartphone (iOS, Android,). Usw.

Alle diese Abfragen teilen die gleichen $ match-Parameter in ihrer Aggregationspipeline. In dieser Pipeline filtere ich die Messung, um in einem Zeitintervall und in einem geografischen Gebiet zu fokussieren.

Gibt es eine Möglichkeit, die im $ match gefundene Teilmenge so im Cache zu halten, dass die Datenbank diesen Filter nicht jedes Mal anwenden muss?

Ich möchte die Antwortzeit meiner Abfragen optimieren.

Probe von einer der Abfrage:

cursor = db.myCollection.aggregate(
    [ 
    { 
     "$match": 
     { 
      "$and": [{"t": {"$gt": tMin, "$lt": tMax}, "location":{"$geoWithin":{"$geometry":square}}}] 
     } 
    }, 
    { 
     "$group": 
     { 
      "_id": {"hourGroup": "$tHour"}, 
      "count": {"$sum": 1} 
     } 
    } 
    ] 
) 

ich das Ergebnis dieser im Cache behalten möchten:

"$match": 
    { 
     "$and": [{"t": {"$gt": tMin, "$lt": tMax}, "location":{"$geoWithin":{"$geometry":square}}}] 
    } 
+0

Ich sehe nicht, wie das geht. – SwissFr

Antwort

1

Die Art und Weise Sie tun können, es ist eine neue Kollektion erstellen $out mit Pipelinestufe.

Dann, wie Sie mit dem Abfrage-Batch gehen wird die erste Abfrage eine übereinstimmende Ausgabe erstellt und die nächsten könnten sie Ergebnisse verwenden.

Es wird eine neue Pipeline-Stufe in der Entwicklung $facet genannt, wo wir Spiel ausführen können, werden und dann dieses Ergebnis in mehreren Aggregationspfaden verwenden (Plan ist es in Mongo 3.4 bereit zu haben)

Alle Kommentare willkommen!

+0

Mein Datensatz ist sehr groß. Die Erstellung einer neuen Sammlung könnte hinsichtlich der Speicherung problematisch sein. $ Facette könnte es in Zukunft lösen, aber ich brauche eine Alternative im Moment. – SwissFr

Verwandte Themen