我正在探索Neo4j,并希望实现以下内容:
(n1)-[r:next if n1.value > 2]->(n2)
(n1)-[r:next if n1.value <= 2]->(n3)
如果我查询(q)-r->(t),我会:
match (n:n1) set n.value=1
match (q)-[r]->[t] return q,r,t
我得到:
(n1)-[next]->(n3)
如果我做了
match (n:n1) set n.value=3
match (q)-[r]->[t] return q,r,t
我得到:
(n1)-[next]->(n2)
我在这里看到了这样的效果:Modeling conditional relationships in neo4j v.2 (cypher)和neo4j conditional relationship
然而,这不符合我的需要,有两个原因:
match (n1)-[r]->(n3) where n1.value = r.value
进行查询。我还没试过呢。或者,我可能完全失去了一些东西.
发布于 2016-09-26 18:29:35
如果我对你的理解是正确的(你的问题中有一些错误),这可能对你有用:
MATCH (n1 {id:123}), (n2 {id: 234}), (n3 {id: 345})
WITH n1, n2,
CASE WHEN n1.value > 2 THEN {a:[1]} WHEN n1.value <= 2 THEN {b:[1]} END AS todo
FOREACH(x IN todo.a | CREATE (n1)-[:NEXT]->(n2))
FOREACH(y IN todo.b | CREATE (n1)-[:NEXT]->(n3));
MATCH
子句查找这3个节点。
WITH
子句恰好创建了以下内容之一:
todo.a
集合如果n.value > 2
todo.b
集合如果n.value <= 2
NULL
todo
.如果存在todo.a
或todo.b
,那么FOREACH
子句中的一个(并且只有一个)将创建适当的关系。
https://stackoverflow.com/questions/39709415
复制相似问题