Neo4j返回某个子图中存在的所有节点和关系

时间:2017-07-03 16:40:53

标签: neo4j cypher

我想指定一个节点并返回该节点具有的所有关系,以及连接其余节点的所有其他关系。

我想要回归的一个例子是:

Eric, PARENT_OF, Mia
Eric, PARENT_OF, Peter
Mia, SIBLING_OF, Peter
Mia, SPOUSE_OF, Mark
...

假设指定的节点是Eric,他们查询应该返回与他直接相关的所有关系以及未连接到Eric但是连接到他的某些连接的关系节点

1 个答案:

答案 0 :(得分:3)

我已使用此数据集模拟您的场景:

CREATE (eric:Person {name:'Eric'})
CREATE (mia:Person {name:'Mia'})
CREATE (peter:Person {name:'Peter'})
CREATE (mark:Person {name:'Mark'})
CREATE (eric)-[:PARENT_OF]->(mia)
CREATE (eric)-[:PARENT_OF]->(peter)
CREATE (mia)-[:SIBLING_OF]->(peter)
CREATE (mia)-[:SPOUSE_OF]->(mark)

以下查询应该有助于实现您的目标:

MATCH (root:Person {name:'Eric'})-[r*1..3]->(a:Person)
UNWIND r AS rs
RETURN DISTINCT startNode(rs).name, type(rs), endNode(rs).name

结果:

╒════════════════════╤════════════╤══════════════════╕
│"startNode(rs).name"│"type(rs)"  │"endNode(rs).name"│
╞════════════════════╪════════════╪══════════════════╡
│"Eric"              │"PARENT_OF" │"peter"           │
├────────────────────┼────────────┼──────────────────┤
│"Eric"              │"PARENT_OF" │"Mia"             │
├────────────────────┼────────────┼──────────────────┤
│"Mia"               │"SIBLING_OF"│"peter"           │
├────────────────────┼────────────┼──────────────────┤
│"Mia"               │"SPOUSE_OF" │"Mark"            │
└────────────────────┴────────────┴──────────────────┘