我正在探索Neo4j,并希望实现以下效果:
(n1)-[r:next if n1.value > 2]->(n2)
(n1)-[r:next if n1.value <= 2]->(n3)
如果我查询(q) - [r] - &gt;(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
进行查询。我还没有尝试过。或者,我可能完全错过了一些东西......
答案 0 :(得分:0)
如果我理解正确(你的问题中有一些错误),这可能适合你:
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
子句中的一个(且仅一个)将创建适当的关系。