我可以在aql中使用内联表达式作为过滤条件吗

时间:2019-01-18 09:53:53

标签: expression inline arangodb

我可以在aql中将内联表达式用于这样的过滤条件吗?

for u in folders filter u.gacl[* filter contains(CURRENT.permissions,'c') and CURRENT.principal == 'users/12345'] return u

样本数据:

my sample data is:
 {
  "_key": "key-002",
  "_id": "folders/key-002",
  "_rev": "_YDQN32G--_",
  "guser": "users/12345",
  "code": "key-001",
  "gacl": [
    {
      "principal": "users/12345",
      "permissions": "rwd",
      "flags": "",
      "type": "A"
    }
  ],
  "isRoot": true,
  "gtime": "1527675486269",
  "gstatus": 0,
  "name": "f1",
  "guid": "key-001",
  "bosclass": "folders"
}

我尝试过,但是没有用。

1 个答案:

答案 0 :(得分:1)

我猜您希望此查询不返回任何匹配的文档,但是即使“ permissions”值与期望值不匹配,它仍然会返回该文档。

这由查询的FILTER表达式解释:

u.gacl[* filter contains(CURRENT.permissions,'c') and CURRENT.principal == 'users/12345']

此表达式使用star运算符,该运算符始终生成一个数组作为其结果。由于没有数组元素与单个元素上使用的过滤器匹配,因此整个表达式的结果就是空数组:

[]

因此查询的FILTER条件转换为

FILTER []

当将[]转换为boolean.filter(

因此,使用此FILTER条件,每个文档都将匹配。

将条件更改为

true

应该做你想要的。