Restheart Aggregation Framework - 可选的Avars?

时间:2017-04-26 14:48:28

标签: restheart

我们在RestHeart中有一个聚合查询,效果很好。

match部分,我们允许用户指定特定的文档ID,以便仅返回该文档:

                "_$match" : {
                    "_id" : {
                        "_$var" : "n"
                    },

但是,我们也希望用户能够省略这一点,并获取集合中的所有文档。

有没有办法让avars成为可选项,或为avar指定通配符?目前,如果用户省略了avar,则会出错。并将avar设置为null或空字符串与这些值完全匹配。

我想另一种选择是聚合查询属性中是否存在条件逻辑 - 不确定这是否可行。

由于

汤姆

2 个答案:

答案 0 :(得分:1)

我找到了一个更简单的解决方案。 _properties集合中的聚合查询可以保持原样,但可以在GET请求中指定通配符。这是一个例子:

GET https://test.restheartapi.com:4443/DataBase/collection/_aggrs/items?avars={"n":/.*/, "m":/.*/ }

...所以尽管在RestHeart中不可能使avars成为可选项,但仍然可以指定一个通配符作为值。

我不确定使用像这样的正则表达式是否有轻微的性能损失,但它似乎是目前唯一的简单方法。

答案 1 :(得分:-1)

您可以使用$cond运算符

进行条件聚合
  

计算布尔表达式以返回两个指定的返回表达式之一。

     

$ cond表达式具有以下两种语法之一:

     

{ $cond: { if: <boolean-expression>, then: <true-case>, else: <false-case-> } }

     

或者:

     

{ $cond: [ <boolean-expression>, <true-case>, <false-case> ] }