如果我需要按ID数组进行过滤,我该如何使用绑定呢?
文档没有提供任何提示。
for c in commit
filter c.hash in ['b0a3', '9f0eb', 'f037a0']
return c
最佳答案
更新答案以处理我错过的绑定参考。
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
关键是当您发送绑定参数
@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
本示例将使用字符串
@hashes
,然后使用SPLIT
和","
作为分隔符的"
内容。这会将输入变量转换为数组,然后查询将按预期工作。它还将命中hash
属性的索引。分隔符用单引号引起来,以避免转义,这也是可能的,但可读性较差:
["\",\"", "\""]
请注意,
","
首先被列为分隔符,因此SPLIT的结果为[ "", "9f0eb", "b0a3", "f037a0" ]
代替[ "", ",", "9f0eb", "b0a3", "f037a0" ]
。可以使用REMOVE_VALUE消除由bind参数值中的第一个双引号引起的空字符串元素,该元素会使查询返回以空字符串作为哈希的提交记录。
推荐的方法是将
["b0a3", "9f0eb", "f037a0"]
作为数组传递,如开头所示。