如何在arangob中添加动态过滤器



我想在Arangodb 中处理动态查询字符串

let condition = 'FILTER u.username == '+value
if(usingPhoneNumber){
condition = 'FILTER u.phoneNumber == '+value
}
const query = aql`
FOR u in users
${condition}
RETURN u
`

如果我这样做,我会得到像一样的错误

ArangoError:AQL:语法错误,'@value0 附近出现意外绑定参数

我们可以将aql查询传递到另一个aql查询

let condition = aql`FILTER u.username == ${value}`
if(usingPhoneNumber){
condition = aql`FILTER u.phoneNumber == ${value}`
}
const query = aql`
FOR u in users
${condition}
RETURN u
`

这解决了我的问题。谢谢大家的回答

我猜你的用户名和电话号码是字符串,所以它们必须在引号之间。

let condition = 'FILTER u.username == "' + value + '"'
if(usingPhoneNumber){
condition = 'FILTER u.phoneNumber == "' + value '"'
}
const query = aql`
FOR u in users
${condition}
RETURN u
`

你能试试吗

let condition = 'FILTER u.username == ${value}'
if(usingPhoneNumber){
condition = 'FILTER u.phoneNumber == ${value}'
}

假设价值是得到一些分配,我觉得这可能会奏效。请告诉我出现的错误,以防出现。

我建议您尝试在查询中添加条件。

FOR u in users
FILTER u.username ==${value0} OR  u.phoneNumber == ${value0}
RETURN u

如果这对你有效,我认为问题是aql格式化程序假设所有插入的带有${}的值都是绑定参数,它将被迭代,而不是一个常量查询声明。

您当前的脚本解析为:

{ 
"query" : "FOR u IN users @value0 RETURN c._key", 
"bindVars" : { 
"value0" : "'FILTER u.username == '+value" 
} 

最新更新