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

How to add dynamic filters in arangodb

我想在 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

附近的意外绑定参数

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

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" 
  } 

我们可以将 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
`

这解决了我的问题。谢谢你们的回答