如何在属性名称为参数时查询属性值?

时间:2018-02-21 17:56:16

标签: neo4j cypher

通常我们可以查询属性值,例如:

Match (n:Product)
where n.name="iPhone X"
return n

但是,在我的情况下,我不知道我应该匹配哪个属性,但我只知道值,在这种情况下属性名称变成一种变量。我想要这样的东西:

Match (n:Product)
    where n.{name}="iPhone X"
    return n

或关系变量r:

Match (n:Product)-[{r}]->(c:Color {name:'white'})

在这两种情况下,在我的应用程序中,我事先知道一些属性或关系,而不知道它应该匹配哪个属性。

此查询是否基于Neo4j或spring-data-neo4j支持的属性或关系值?

1 个答案:

答案 0 :(得分:0)

看看这个例子:

CREATE (:Node {name : 'Bruno'})-[r:REL_TYPE]->()

设置Neo4j浏览器参数:

:param {prop : 'name', rel_type : 'REL_TYPE'}

然后查询:

MATCH (n:Node) 
WHERE n[{prop}] = "Bruno"
RETURN n

结果:

╒════════════════╕
│"n"             │
╞════════════════╡
│{"name":"Bruno"}│
└────────────────┘

即:您可以将属性名称用作WHERE子句中方括号中的键。

按动态关系类型查询的解决方法可以使用type()函数,这样:

MATCH (:Node)-[r]->()
WHERE type(r) = {rel_type}
return r