1

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

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

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

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

有没有办法使avars可选,或为此指定通配符avar?目前,如果用户省略了 avar,他们会得到一个错误。并且将 设置avar为 null 或空字符串从字面上匹配这些值。

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

谢谢

汤姆

4

2 回答 2

1

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

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

...因此,尽管不可能在 RestHeart 中使 avars 成为可选,但仍然可以将通配符指定为值。

我不确定使用这样的正则表达式是否会对性能造成小的影响,但这似乎是目前唯一简单的方法。

于 2017-05-03T12:36:51.927 回答
-1

您可以使用$cond运算符进行条件聚合

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

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

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

或者:

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

于 2017-04-27T07:58:13.480 回答