我可以在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"
}
我尝试过,但是没有用。
答案 0 :(得分:1)
我猜您希望此查询不返回任何匹配的文档,但是即使“ permissions”值与期望值不匹配,它仍然会返回该文档。
这由查询的FILTER表达式解释:
u.gacl[* filter contains(CURRENT.permissions,'c') and CURRENT.principal == 'users/12345']
此表达式使用star运算符,该运算符始终生成一个数组作为其结果。由于没有数组元素与单个元素上使用的过滤器匹配,因此整个表达式的结果就是空数组:
[]
因此查询的FILTER条件转换为
FILTER []
当将[]
转换为boolean.filter(
因此,使用此FILTER条件,每个文档都将匹配。
将条件更改为
true
应该做你想要的。