我有一组表示层次结构的数据如下。
MATCH (dv:DATview {SUPid: 'VIE_ClassMeronomy_01' })<-[:TOV_CLASSIFIES]-(mv:METtypeOfView),
(mv)<-[:TOO_CONSTRAINS_TOV]-(mo:METtypeOfObject)-[:TOO_CLASSIFIES(a:DATobject),
(mv)<-[:TOL_CONSTRAINS_TOV]-(ml:METtypeOfLink)-[:TOL_CLASSIFIES]->(d:DATlink)
return a,d
我尝试执行以下查询以获取父节点“Test Class A”,但它返回每个节点。假设是否没有传入LNK到节点,该节点是父节点。
MATCH (dv:DATview {SUPid: 'VIE_ClassMeronomy_01' })<-[:TOV_CLASSIFIES]-(mv:METtypeOfView),
(mv)<-[:TOO_CONSTRAINS_TOV]-(mo:METtypeOfObject)-[:TOO_CLASSIFIES(a:DATobject),
(mv)<-[:TOL_CONSTRAINS_TOV]-(ml:METtypeOfLink)-[:TOL_CLASSIFIES]->(d:DATlink)
WHERE NOT (d)-[:LNK]->(a)
return a,d
如何才能找到父节点?
答案 0 :(得分:1)
在您的查询中,您将浏览ir.ui.view
和DATobject
类型的对象对的所有可能组合,当然对于每个节点DATlink
是{{1}的节点1}},与之无关。
您需要找到一个根本没有链接的节点:
DATobject
答案 1 :(得分:0)
所以,假设你只想要直接父母,并且你拥有孩子的身份(让我们使用VIE_ClassMeronomy_01
),那么你可以匹配
MATCH (parent)-->(child:DATview {SUPid: 'VIE_ClassMeronomy_01' }) return *
但由于您的数据具有中间节点,因此它将是
MATCH (parent)-->()-->(child:DATview {SUPid: 'VIE_ClassMeronomy_01' }) return *
如果你真的想要根节点,你可以要求没有传入链接的节点
MATCH (root) WHERE NOT ()-->(root) RETURN root
当然,根据需要在MATCH中使用标签/定义属性并且已知。
旁注http://console.neo4j.org/是分享示例数据的好方法,这样人们就可以更好地了解您的设置和约束。 (比图片更有用)
编辑:
你也可以做一个混合,从ID节点
获取root权限 MATCH (root)-[*]->(target{id:"heyo"}) WHERE NOT ()-->(root) RETURN root
或者,根据您的数据,这可能会更快
MATCH (root), (target{id:"heyo"}) WHERE NOT ()-->(root) MATCH (root)-[*]->(target) RETURN root