2017-05-05 67 views
0

我在RESTHeart中有一個聚合管道。結果如何排序?RestHeart聚合:如何對結果進行排序?

在普通的RESTHeart查詢中,我們可以使用?sort_by查詢參數。但是,將此添加到聚合查詢中的URL時,該排序似乎不被遵守。

另一種方法是添加排序字段在聚集查詢中的元數據 - 例如像這樣:

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

...這對於像上述靜態指定的字段工作正常。但是我想讓sortField可以改變(就像avar)並且在查詢變量中指定。在這種情況下,我還沒有找到使用avars的方法。可以使用avars指定排序方向:

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

...但是如何在REST請求中動態指定密鑰?

湯姆

回答

0

您通過阿瓦爾查詢參數

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

欲瞭解更多信息,請參閱文件aggregation section

阿瓦爾可以是任何JSON,唯一的限制傳遞變量是你不能通過運算符來避免查詢注入。所以,如果你想通過排序鍵,您可以:

聚集

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

查詢

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

注意,自restheart 3.0,在不再需要運營商_前綴。

+0

嗨安德烈。感謝您的迴應。你的代碼展示瞭如何傳遞avars,這很好。我明白如何傳遞avars,但問題是如何動態傳遞* key *,而不是值。 換句話說,它是需要改變的*字段名稱*的值。在我的例子中,它是* submittedAt *,我想用動態變量替換它。 我認爲avars目前只適用於值而不是鍵。 –

+0

嗨,湯姆,我編輯答案以更好地掩蓋您的問題 –

相關問題