2017-05-05 1 views
0

Ich habe eine Aggregationspipeline in RESTHeart. Wie können die Ergebnisse sortiert werden?RestHeart Aggregation: Wie sortiere ich Ergebnisse?

In einer normalen RESTHeart-Abfrage können wir den Abfrageparameter? Sort_by verwenden. Wenn Sie dies jedoch in einer Aggregationsabfrage der URL hinzufügen, scheint die Sortierung nicht berücksichtigt zu werden.

Eine weitere Option ist das Sortierfeld in den Metadaten für die Aggregation Abfrage hinzuzufügen - zum Beispiel wie folgt aus:

  { 
       "_$sort" : { 
        "submittedAt" : -1 
       } 
      }, 

... Das funktioniert für statisch angegebenen Felder wie die oben in Ordnung. Aber ich möchte das sortField änderbar (wie ein Avar) und in einer Abfragevariablen angegeben haben. Ich habe keine Möglichkeit gefunden, Avars in dieser Situation zu verwenden. Es ist möglich, die Sortierrichtung mit Awaren zu spezifizieren:

   "_$sort" : { 
        "submittedAt" : { 
         "_$var" : "dir" 
        } 
       } 

... aber wie kann der Schlüssel dynamisch in der REST-Anfrage angegeben werden?

Tom

Antwort

0

Sie passieren die Variable über Awaren Abfrageparameter

GET /db/coll/_aggrs/test_ap?avars={"dir":1} 

Weitere Informationen in der Dokumentation aggregation section

Die Awaren jede json sein kann, die einzige Einschränkung ist, dass Sie keine Operatoren übergeben können, um die Abfrage-Injektion zu vermeiden. Also, wenn Sie den Sortierschlüssel übergeben möchten können Sie:

Aggregation

{ "$sort" : { "$var": "sortExpr" } } } 

Abfrage

GET /db/coll/_aggrs/test_ap?avars={"sortExpr":{"submittedAt": 1}} 

Hinweis dass seit restheart 3.0, das _ Präfix für Unternehmer nicht mehr benötigt.

+0

Hallo Andrea. Danke für die Antwort. Ihr Code zeigt, wie Sie Avars weitergeben, was gut funktioniert. Ich verstehe, wie man Avars übergibt, aber die Frage ist, wie man den * Schlüssel * dynamisch, im Gegensatz zum Wert, übergibt. Mit anderen Worten, es ist der Wert des * Feldnamens *, der geändert werden muss. In meinem Beispiel ist es * submitAt *, das ich dynamisch durch eine Variable ersetzen möchte. Ich denke avars funktionieren nur für Werte und nicht Schlüssel, zZ. –

+0

Hallo Tom, ich habe den Antworten bearbeitet, um deine Frage besser zu behandeln –