2016-03-20 3 views
2

Ich versuche, einen Wert innerhalb eines gegebenen Polygon zu berechnen:

acutally ich diese Pipeline bin mit:

'aggregation': { 
     'pipeline': [ 
      { "$match" : { "location" : "$loc" } }, 
      { "$group": { "_id": 'Average', "AvgField": { "$avg": "$myavgvalue" } , "count": {"$sum": 1} } }, 
     ] 
    } 

aber es scheint, das $ Spiel ignoriert den Geodatenindex.

irgendeine idee wie ich das machen kann?

freundlichen Grüßen Harald

+1

Was ist $ loc? Ich würde Ihnen empfehlen, Ihren Post zusammen mit Beispieldokumenten zu aktualisieren. Ohne unterstützende Informationen ist es nahezu unmöglich zu finden, wo das Problem liegt und wie es gelöst werden kann. – Saleem

+0

Hallo danke für deine Antwort. $ loc ist meine geowithin-Abfrage, die die Koordinaten von meinem gegebenen Polygon enthält –

+0

Bitte fügen Sie einige Beispieldokumente hinzu – Isaiah4110

Antwort

2

Sie müssen die ?aggregate={"$loc": ...} Abfragesyntax verwenden, so dass der Parser weiß, dass es die Aggregation Motor anstelle des Standard-Abfrage-Parser aufgerufen hat. Dieses Beispiel kommt direkt aus dem documentation:

$ curl -i http://example.com/posts?aggregate={"$value": 2} 

Stellen Sie außerdem sicher, dass die richtigen Geo-Index der Sammlung hinzugefügt wurde. Eve wird dies nicht automatisch für Sie tun, es sei denn, Sie wählen dies explizit durch Setzen von mongo_indexes.