Neo4j:如何从路径返回单个实体

时间:2016-06-06 16:20:53

标签: neo4j

我正在跑步:

MATCH p=(a)-[*2]-() where id(a) = 0 RETURN *

针对:

CREATE 
(P1:Person),
(P2:Person),
(P3:Person),
(P4:Person),
(P5:Person),
(P6:Person),
(P7:Person)

CREATE 
(A1:Address),
(A2:Address),
(A3:Address),
(A4:Address)

CREATE 
(P1)-[:Friend]->(P3),
(P5)-[:Friend]->(P7)

CREATE
(P1)-[:House]->(A1),
(P1)-[:House]->(A2),
(P2)-[:House]->(A2),
(P2)-[:House]->(A4),
(P3)-[:House]->(A3),
(P4)-[:House]->(A2),
(P5)-[:House]->(A1),
(P6)-[:House]->(A3)

并返回预期值

问题是当数据库只有一个值时,例如:

CREATE 
(P1:Person)

在这种情况下,搜索路径为空。如何推广上面的查询以获得深度小于2的结构?

1 个答案:

答案 0 :(得分:2)

搜索路径为空,因为您在MATCH中定义的模式应该在那里。

你可以:

a)使用OPTIONAL MATCH作为关系部分:

MATCH (a)
OPTIONAL MATCH p=(a)-[*2]-()
RETURN *

哪个会为p

返回a和null

b)使用长度0..x作为关系深度:

MATCH p=(a)-[*0..2]-() RETURN *

哪个会和a中的相同,但是存在差异

在您的查询中,路径必须长度为2,此处路径可以介于0到2之间

关于关系深度的解释:

http://graphaware.com/graphaware/2015/05/19/neo4j-cypher-variable-length-relationships-by-example.html