Neo4j-Cypher:是否有可能在cypher查询中传递动态需要的节点字段?

时间:2017-08-06 17:58:23

标签: neo4j cypher spring-data-neo4j

我试图找出动态传递返回参数的方法,这样我可以重用多个案例的查询,比如在一种情况下我需要两个节点字段,在另一种情况下我需要三个字段,如

所以我需要用户

的两个属性 id和名称
Match (n:User) where id(n)={0} return n = {1};   //cypher params to pass= {0=1,1={id(n) as id,n.name as name}};

这里,我需要三个用户属性,

Match (n:User) where id(n)={0} return n = {1};   //cypher params to pass= {0=1,1={id(n) as id,n.name as name,n.active as active}};

因此可以动态传递返回参数。

谢谢,任何帮助都将不胜感激。

1 个答案:

答案 0 :(得分:0)

据我了解,您希望在查询结束时返回一组不同的值,具体取决于您传递给查询的参数?你可以在cypher中轻松实现这一点,使用类似下面的内容!

示例的夹具:

CREATE (u:ExampleUser { name: "Test User" })

查询:

WITH 0 AS return_type  // change to 1 to see just name!
MATCH (u:ExampleUser) WHERE u.name = "Test User"
WITH 
  CASE return_type
    WHEN 0 THEN { name: u.name, id: id(u) }
    WHEN 1 THEN { name: u.name }
  END AS return_value
RETURN return_value

我们使用CASE运算符将return_type的值设置为两个映射之一,具体取决于return_type的值。您可以使用0替换示例中的1以获取名称。同样,用参数替换以动态更改输出。您还可以根据需要添加更多WHEN x THEN y子句。

您的输出将是名为return_value的映射。