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

问题描述 投票:0回答:1

在对象的程序集具有对象的子程序集的子场景中:

程序集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
neo4j cypher tree-traversal
1个回答
0
投票

我用它来创建样本图:

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

© www.soinside.com 2019 - 2024. All rights reserved.