【问题标题】:Creating multiple aggregations using RestHeart使用 RestHeart 创建多个聚合
【发布时间】:2017-10-23 13:29:58
【问题描述】:

我正在使用 RestHeart 对 MOngoDB 聚合查询进行 REST 调用。我正在尝试将多个聚合创建为一次性活动,然后在以后需要时执行它们。 目前我看到一次只创建一个聚合。如果我创建一个新的,那么它会被覆盖。

是否可以将多个聚合创建为具有不同 URI 的一次性活动?

这样,我可以稍后调用 URI,而不必每次都重写聚合查询。

【问题讨论】:

    标签: mongodb restheart


    【解决方案1】:

    RESTHeart 允许通过 aggrs 集合属性定义聚合。请参阅此处的文档https://softinstigate.atlassian.net/wiki/x/AwDw

    aggrs 是一个聚合定义数组,类似于:

    aggrs: [ { <aggregation_1> }, { <aggregation_2> }, ... ]
    

    聚合定义是:

    {
       "type":"pipeline",
       "uri": <uri>,
           "stages": [
           "<stage_1>",
           "<stage_2>",
           ...
       ]
    }
    

    每个聚合都绑定到定义中指定的uri,在/db/coll/_aggrs下,所以:

    GET /db/coll/_aggrs/aggreation1
    GET /db/coll/_aggrs/aggreation2
    

    您说您的聚合被覆盖,我怀疑您正在更新您的集合以替换 aggrs 数组。确保使用 aggrs 数组中的所有聚合定义更新集合属性

    所以要使用出色的httpie cli 工具创建第一个聚合

    http PATCH <ip>/db/coll aggrs:='[ {<aggregation_1>} ]'
    

    要创建第二个聚合,您可以传递整个 aggrs 数组:

     http PATCH <ip>/db/coll aggrs:='[ {<aggregation_1>}, {<aggregation_2>} ]'
    

    或使用 $addToSet 更新运算符将第二个添加到 aggrs 数组中

     http PATCH <ip>/db/coll aggrs:='{"$addToSet": {"aggrs": {<aggregation_2>}}}'
    

    【讨论】:

    • 谢谢,我也是通过仔细查看 API 规范找到的。如果我需要追加或更新 _proprties 中已经存在的聚合,我应该怎么做。
    • 我的意思是。我是否需要在原始 JSON 中添加另一个 aggr 并运行 PUT REST 调用?或者我应该使用不同的 JSON 运行不同的 REST 调用
    • 我使用邮递员发送 PATCH 电话。但由于某种原因,它不起作用。不知道可能出了什么问题。
    猜你喜欢
    • 2017-10-18
    • 2016-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-26
    • 1970-01-01
    • 2019-12-04
    • 1970-01-01
    相关资源
    最近更新 更多