使用Cypher设置/更改具有动态名称的属性

时间:2015-06-25 17:24:44

标签: neo4j cypher

因此,当我尝试设置属性名称/值对时,我不确定属性名称是什么。它将取决于元数据节点。

两个元数据节点:

{ id:1, value:'name' }
{ id:2, value:'age' }

我需要为Person节点添加一个属性,但我不想使用条件语句(并且cypher没有条件语句)。我想要这样的东西:

if (metadata.id = 1) {
    set person.name = 'xx'
} else if (metadata.id = 2) {
    set person.age = 'xx'
}

或:

match (m:metadata{id:1}), (p:person{id:1}) set p.'m.value' = 'xx'

我不想使用if / else条件声明。是否存在密码条件声明,或者如何实现?

1 个答案:

答案 0 :(得分:2)

您可以使用WHERE过滤条件

MATCH (p:Person) WHERE p.age > 21 SET p.drunk = true

或者您可以使用CASE表达式生成零或单元素列表,然后您可以将其用于FOREACH

MATCH (p:Person) 
WITH p, (case when p.age > 21 then [1] else [] end) as drunk_filter
FOREACH (x in drunk_filter | SET p.drunk = true)

Foreach的优点是在此之后继续查询。