0

我在 RESTHeart 中有一个聚合管道。结果如何排序?

在普通的 RESTHeart 查询中,我们可以使用 ?sort_by 查询参数。但是,在聚合查询中将此添加到 URL 时,排序似乎没有得到尊重。

另一种选择是在聚合查询的元数据中添加排序字段 - 例如:

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

...这对于像上面这样的静态指定的字段来说很好。但我想让 sortField 可变(如 avar)并在查询变量中指定。我还没有找到在这种情况下使用 avars 的方法。可以使用 avars 指定排序方向:

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

...但是如何在 REST 请求中动态指定密钥?

汤姆

4

1 回答 1

0

您通过avars查询参数传递变量

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

有关更多信息,请参阅文档汇总部分

avars可以是任何 json,唯一的限制是你不能传递操作符来避免查询注入。因此,如果您想传递排序键,您可以:

聚合

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

询问

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

请注意,从 restheart 3.0 开始,不再需要运算符的 _ 前缀。

于 2017-05-06T07:41:38.047 回答