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

vm0i2vca  于 2022-12-09  发布在  Go
关注(0)|答案(4)|浏览(149)

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

let condition = 'FILTER u.username == '+value

if(usingPhoneNumber){
   condition = 'FILTER u.phoneNumber == '+value
}

const query = aql`
   FOR u in users
      ${condition}
   RETURN u
`

如果我这样做,我会得到如下错误
Arango错误:AQL:语法错误,“@value0”附近有意外的绑定参数

66bbxpm5

66bbxpm51#

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

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

ego6inou

ego6inou2#

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

let condition = 'FILTER u.username == "' + value + '"'

if(usingPhoneNumber){
   condition = 'FILTER u.phoneNumber == "' + value '"'
}

const query = aql`
   FOR u in users
      ${condition}
   RETURN u
`
ryevplcw

ryevplcw3#

你能不能试试

let condition = 'FILTER u.username == ${value}'

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

假设值被赋值了,我觉得这可能有用。一定要让我知道出现的错误,以防万一。

p5cysglq

p5cysglq4#

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

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

相关问题