使用RestHeart创建多个聚合

时间:2017-05-23 14:21:13

标签: mongodb restheart

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

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

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

1 个答案:

答案 0 :(得分:0)

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>}}}'