在对象的程序集具有对象的子程序集的子场景中:
程序集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
如何MATCH
装配1中装配链的any part具有给定名称属性的所有对象,即JOINED_TO
any part具有给定name属性的对象
我的猜测是:
MATCH ob1:Object{name:DEF} - [:PART_OF*] -> ob2:Object - [:JOINED_TO] - ob3:Object <- [:PART_OF*] - ob4:Object{name:PQR}
RETURN ob2, ob3
但是没有多少“ asciiart”图表游戏能满足我的期望
ob2 ob3
------------
C G
我用它来创建样本图:
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
这将正确返回名称为'GHI'和'STU'的两个节点。
此查询不会返回“ C”或“ G”,因为您从未将其保存到图形中。在创建查询中,“ C”和“ G”(以及所有其他使用的单个字母)是所讨论节点的变量。变量不会保存到数据库中,并且在查询完成后不会保留。它们用于在查询的整个过程中解决事物(节点,关系,值等),但不能超出它。
如果要查询返回“ C”和“ G”,则应将它们另存为节点上的属性,并在RETURN中返回这些属性。
这是Cypher开发人员指南中的documentation on variables。