从Neo4j中的子节点跟踪父节点

xlpyo6sf  于 2022-11-05  发布在  其他
关注(0)|答案(1)|浏览(247)

我的数据库里有一个很大的Graph,里面有其他的东西,但我只是拿来做个样本。

我有一个场景,我到达节点6,问了不同的问题。根据父节点的不同,问题也不同。如果是节点1,问题也不同,对于节点2,问题也不同。
当我到达节点6时,我想检测它沿着哪条路径到达节点6。有什么方法可以做到这一点吗?
这是我的创建密码

CREATE (feat1:FEATURE {name: 'Login', desc: 'Customer Login'}),
(feat2:FEATURE {name: 'Profile', desc: 'Customer PROFILE'}),

(R1:RULE {name:'R1',question:'q1'}),
(Auth1:THREAT {name:   'auth1', desc: '', impact: ''}),

(Auth2:THREAT {name:   'auth2', desc: '' ,impact: ''}),

(av_WEB_LOG:Attack_Vector {name:  'WEB_LOG',
                           desc:  ''}),

(feat1)-[:HAS]->(Auth1),
(feat2)-[:HAS]->(Auth2),
(feat2)-[:HAS]->(Auth1),
(Auth1)-[:HAS]->(R1),
(Auth2)-[:HAS]->(R1),
(R1)-[:HAS]->(av_WEB_LOG),
lxkprmvk

lxkprmvk1#

这个简单的命令档会告诉您web_login是否有来自Login或Profile的路径。请注意,CASE WHEN ELSE只会给予您一个结果,可能是path1或path2,也可能是没有路径。符号[:HAS*3]表示从Login到目的节点有3个跳跃。

MATCH (n:Attack_Vector {name: 'WEB_LOG'})  
WITH CASE 
    WHEN exists (
      (n)-[ :HAS*3]-(:FEATURE {name: 'Login'})
                ) THEN 'path1' 
    WHEN exists (
      (n)-[ :HAS*3]-(:FEATURE {name: 'Profile'})
                ) THEN 'path2' 
    ELSE 
      'no path' 
    END as p 
RETURN p

相关问题