如何使用JS驱动程序向Cypher查询添加动态过滤器?

时间:2017-01-08 19:42:15

标签: javascript neo4j

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

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

基本上我希望驱动程序智能地将params分配到WHERE子句中,保留params的类型(例如,它知道'Milo'是第一个查询中的字符串,{{{ 1}}是第二个中的数字。

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

27

1 个答案:

答案 0 :(得分:2)

这可能就是你要找的东西:

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