【问题标题】:RestHeart Aggregation: How to sort results?RestHeart 聚合:如何对结果进行排序?
【发布时间】:2017-05-05 14:00:44
【问题描述】:

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

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

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

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

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

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

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

汤姆

【问题讨论】:

    标签: restheart


    【解决方案1】:

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

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

    更多信息请参考文档aggregation section

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

    聚合

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

    查询

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

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

    【讨论】:

    • 嗨,安德里亚。感谢您的回复。您的代码显示了如何传递 avar,效果很好。我了解如何传递 avar,但问题是如何动态传递 key,而不是传递值。换句话说,需要改变的是字段名的值。在我的示例中,我想用一个变量动态替换它的 submittedAt。我认为 avars 目前只适用于值而不是键。
    • 嗨,汤姆,我编辑了答案以更好地涵盖您的问题
    猜你喜欢
    • 2014-12-24
    • 2019-04-02
    • 2019-07-12
    • 1970-01-01
    • 1970-01-01
    • 2020-10-12
    • 2020-03-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多