2017-05-05 63 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

嗨,汤姆,我编辑答案以更好地掩盖您的问题 –

相关问题