更新答案以处理我错过的绑定参考。
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消除。
推荐的方法是将["b0a3", "9f0eb", "f037a0"]作为数组传递,但是如开头所示。