基于neo4j中每个节点的祖先属性按关系匹配节点

基于neo4j中每个节点的祖先属性按关系匹配节点,neo4j,cypher,tree-traversal,Neo4j,Cypher,Tree Traversal,在对象部件具有对象部件的部件的场景中: 组件1 A:Object{name:ABC} is PART_OF B:Object{name:DEF} is PART_OF C:Object{name:GHI} 组件2 D:Object{name:JKL} is PART_OF E:Object{name:MNO} is PART_OF F:Object{name:PQR} is PART_OF G:Object{name:STU} 组件1的某个组件对象连接到组件2 C is JOINED_TO

在对象部件具有对象部件的部件的场景中:

组件1

A:Object{name:ABC} is PART_OF B:Object{name:DEF} is PART_OF C:Object{name:GHI}
组件2

D:Object{name:JKL} is PART_OF E:Object{name:MNO} is PART_OF F:Object{name:PQR} is PART_OF G:Object{name:STU}
组件1的某个组件对象连接到组件2

C is JOINED_TO G
如何
匹配
部件1中部件链的任何部分具有给定名称特性的所有对象,这些对象与任何部分具有给定名称特性的对象相连接

我的猜测是:

MATCH ob1:Object{name:DEF} - [:PART_OF*] -> ob2:Object - [:JOINED_TO] - ob3:Object <- [:PART_OF*] - ob4:Object{name:PQR}
RETURN ob2, ob3

我用它来创建示例图:

CREATE (A:Object{name:'ABC'})-[:PART_OF]->(B:Object{name:'DEF'})-[:PART_OF]->(C:Object{name:'GHI'}),
(D:Object{name:'JKL'})-[:PART_OF]->(E:Object{name:'MNO'})-[:PART_OF]->(F:Object{name:'PQR'})-[:PART_OF]->(G:Object{name:'STU'})
CREATE (C)-[:JOINED_TO]->(G)
我用这个来查询图表:

MATCH (ob1:Object{name:'DEF'}) - [:PART_OF*] -> (ob2:Object) - [:JOINED_TO] - (ob3:Object) <- [:PART_OF*] - (ob4:Object{name:'PQR'})
RETURN ob2, ob3

MATCH(ob1:Object{name:'DEF})-[:PART_OF*]->(ob2:Object)-[:JOINED_TO]-(ob3:Object)显示的内容应该会得到(许多,可能重复的)结果行。(但是,您的查询没有指定任何名称属性)。您能提供一些密码来创建显示您的问题的示例数据吗?我将检查并接受。结果中的C&G是完整对象的简写。令我欣慰的是,你真正的密码和我粗糙的伪密码是多么的相似。
MATCH (ob1:Object{name:'DEF'}) - [:PART_OF*] -> (ob2:Object) - [:JOINED_TO] - (ob3:Object) <- [:PART_OF*] - (ob4:Object{name:'PQR'})
RETURN ob2, ob3