AQL按ID数组过滤

Iva*_*nko 4 arangodb aql

如果我需要按ID数组过滤,我将如何使用绑定?文档没有提供任何有关的提示.

for c in commit
filter c.hash in ['b0a3', '9f0eb', 'f037a0']
return c
Run Code Online (Sandbox Code Playgroud)

Dav*_*mas 8

更新答案以处理我错过的绑定参考.

LET commit = [
    { name: "111", hash: "b0a3" },
    { name: "222", hash: "9f0eb" },
    { name: "333", hash: "asdf" },
    { name: "444", hash: "qwer" },
    { name: "555", hash: "f037a0" }
]

FOR c IN commit
FILTER c.hash IN @hashes
RETURN c
Run Code Online (Sandbox Code Playgroud)

关键是当你发送bind param时@hashes,它需要是一个数组,而不是一个包含数组的字符串.

如果您通过ArangoDB管理工具使用AQL查询工具,请确保单击右上角的"JSON"按钮以确保参数hashes具有值
["b0a3", "9f0eb", "f037a0"]而不是
"['b0a3', '9f0eb', 'f037a0']"

绑定参数

如果你想发送一个字符串作为参数,例如"b0a3","9f0eb","f037a0",所以{ "hashes": "\"b0a3\",\"9f0eb\",\"f037a0\"" }作为绑定参数,那么你可以将字符串分割成一个这样的数组:

LET commit = [
    { name: "111", hash: "b0a3" },
    { name: "222", hash: "9f0eb" },
    { name: "333", hash: "asdf" },
    { name: "444", hash: "qwer" },
    { name: "555", hash: "f037a0" }
]

FOR c IN commit
FILTER c.hash IN REMOVE_VALUE(SPLIT(@hashes, ['","', '"']), "")
RETURN c
Run Code Online (Sandbox Code Playgroud)

此示例将使用字符串@hashes,然后SPLIT使用",""作为分隔符的内容.这会将输入变量转换为数组,然后查询按预期工作.它还会触及hash属性的索引.

分隔符用单引号括起来以避免转义,这也可能但不太可读: ["\",\"", "\""]

请注意,","首先将其列为分隔符,以便SPLIT的结果
[ "", "9f0eb", "b0a3", "f037a0" ]代替
[ "", ",", "9f0eb", "b0a3", "f037a0" ].

由bind参数值中的第一个双引号引起的空字符串元素,可以使查询返回带有空字符串作为哈希的提交记录,可以使用REMOVE_VALUE消除.

建议的方法是["b0a3", "9f0eb", "f037a0"]作为数组传递,如开头所示.