可以将查询参数用作动态过滤器吗?考虑以下功能:

const propFilter = (session, prop, filter) => session.run(`
  MATCH (a:Animal)
  WHERE a.{prop} = {filter}
  RETURN a
`, {prop, filter})


理想情况下,它将是通用属性过滤器。例如:

propFilter(session, 'name', 'Milo') // {name: 'Milo', species: 'Dog'...}
// runs this query
MATCH (a:Animal)
  WHERE a.name = 'Milo'
  RETURN a


propFilter(session, 'age', 27) // {age: 27, species: 'Elephant'...}
// runs this query
MATCH (a:Animal)
  WHERE a.age = 27
  RETURN a


基本上,我希望驱动程序将参数智能地包含在WHERE子句中,保留参数的类型(例如,它知道'Milo'是第一个查询中的字符串,而27是第二个查询中的数字。

我还想避免查询中的字符串插值:

// bad, but does what I want
(session, prop, value) => session.run(`
  MATCH
 (a:Animal {${prop}: {value}})
  RETURN a
`, { value })

最佳答案

这可能是您要寻找的:

const propFilter = (session, prop, filter) => session.run(`
  MATCH (a:Animal)
  WHERE a[{prop}] = {filter}
  RETURN a
`, {prop: prop, filter: filter})

关于javascript - 如何使用JS驱动程序向Cypher查询添加动态过滤器?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41537022/

10-13 03:19