如何删除neo4j图中的互连节点?

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

我有以下图表,它是查询的结果,如下所示:

MATCH p=(parent:FEATURE)-[*]->(gap:GAP)

WHERE parent.name = "Update Profile" AND ANY(substring IN ["CSRF", "manipulate"] 
WHERE gap.name CONTAINS substring)

 RETURN p,

   apoc.coll.removeAll(

     [node IN NODES(p) | [fp = (node:RULE)<-[:REQUIRE]-(f:FACT) | fp ]],

     [[]]) AS factPaths

我想要做的是删除节点GENERIC_FEAT、规则、攻击类别和攻击向量。我想连接功能 -> 威胁 -> GAP <- FACT。 是否可以在查询返回图形时像这样连接图形?我想修改我的查询以返回具有以下模式的图表功能 - >威胁 - >差距<- FACT而不是图片中显示的长图表。

neo4j
1个回答
0
投票

这是一个查询,它会删除您不想看到的关系和节点,并将它们替换为剩下的节点之间的虚拟关系:

MATCH (fe:Feature)-->+(t:Threat)-->+(g:GAP)
MATCH (g)<--+(fa:FACT)
WITH collect(DISTINCT [fe, t]) + collect(DISTINCT [t, g]) AS hases,
    collect(DISTINCT [fa, g]) AS requireses
WITH 
    COLLECT {
        WITH hases
        UNWIND hases AS pair
        RETURN [
            pair[0], 
            apoc.create.vRelationship(pair[0], 'HAS', {}, pair[1]), 
            pair[1]
        ] AS tuple
    } +
    COLLECT {
        WITH requireses
        UNWIND requireses AS pair
        RETURN [
            pair[0], 
            apoc.create.vRelationship(pair[0], 'REQUIRES', {}, pair[1]), 
            pair[1]
        ] AS tuple
    } AS tuples
UNWIND tuples AS tuple
RETURN tuple[0], tuple[1], tuple[2]

根据上面的数据,浏览器中的结果大致如下:

有两个 MATCH 子句,因为

GAP <-- FACT
路径需要重新遍历部分
Threat --> GAP
路径,并且 Cypher 要求关系在从
MATCH
发出的结果中是唯一的。

collect()
+
DISTINCT
可以删除节点之间创建的所有重复关系,因为存在多个路径重新遍历相同的子路径。

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