[英]Error: 1553 - AQL: bind parameter '@myParameter' has an invalid value or type (while parsing) - ERROR_QUERY_BIND_PARAMETER_TYPE
[英]AQL: Bind parameter on operator
有沒有辦法在運算符(“<”,“<=”等......)上有綁定參數? 我正在開發 Foxx 服務。
例子:
const operator = '<'
const res = query`
FOR v IN myCollection
FILTER v.value ${operator} ${maxValue}
`
我可以用db._query
做到這一點:
const operator = '<'
const res = db._query('
FOR v IN myCollection
FILTER v.value ${operator} @maxValue'
{ maxValue: 100 })
普通綁定參數(帶有一個@
)只能用於值null
、 true
、 false
、數字、字符串、 arrays 和對象。 集合綁定參數(帶有兩個@@
)可以在指定集合名稱的地方使用。
在 AQL 中無法通過綁定參數傳遞運算符,因為它可能會改變查詢的含義,或使其完全無效。
考慮以下示例:
FOR v IN myCollection
FILTER v.value @operator @maxValue
這個查詢甚至不解析,不管綁定參數中傳遞了什么值。 這是一件好事,因為否則可能會傳遞類似@operator: "abc"
, @maxValue: ">="
類的東西,這意味着可以在沒有綁定參數的情況下很好地解析查詢,但使用綁定會產生解析錯誤注入的參數。
所以這里最簡單的解決方案是通過模板字符串替換將比較運算符注入到查詢中,當然您需要確保請求的比較運算符在允許的運算符的白名單中。 但是即使使用綁定參數,您也需要執行此操作,否則人們可以發送@operator: "!="
或@operator: "NOT IN"
或其他您不期望或可以使您的查詢更多的運算符昂貴的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.