删除Neo4j中的隐藏节点

anauzrmj  于 11个月前  发布在  其他
关注(0)|答案(2)|浏览(104)

我有一个查询,显示了我的大型图的结果,如下所示:
x1c 0d1x的数据
下面是我的查询来显示图表

MATCH p=(parent:FEATURE)-[*]->(gap:GAP) WHERE parent.name = "Update Profile" 
and (gap.name contains "CSRF" )  RETURN p

字符串
节点R11_UP和R12_UP具有FACT类型的传入边;此查询不显示该类型。下面是如果我手动显示这些传入边,图形的外观:



我想更新我的查询,以显示这些FACT节点沿着与此查询显示的其他图形。我无法为其设计查询。我尝试了几个查询,但没有一个有效。我总是在最后坚持使用此图形。

8wtpewkr

8wtpewkr1#

我会选这样的

MATCH p=(parent:FEATURE)-[*]->(gap:GAP)
WHERE parent.name = "Update Profile" AND gap.name contains "CSRF"
RETURN p,
       [node IN nodes(p) |
           [ factPath = (node)<-[:FACT]-(f) | factPath ]
       ] AS factPaths

字符串
所以你基本上是遍历路径p上的节点,并选择任何具有FACT关系的传入路径
如果您想过滤掉空列表(对于没有传入FACT rels的节点),可以使用附加的WHERE来完成

MATCH p=(parent:FEATURE)-[*]->(gap:GAP)
WHERE parent.name = "Update Profile" AND gap.name contains "CSRF"
RETURN p,
     [node IN nodes(p) WHERE EXISTS((node)<-[:FACT]-()) |
           [ factPath = (node)<-[:FACT]-(f) | factPath ]
     ] AS factPaths


注意事项:factPaths作为路径的嵌套数组返回。根据您想对它做什么(到可视化)或进一步处理,您可能想使用apoc.科尔.flatten()来.. eh.. flatten它

qoefvg9y

qoefvg9y2#

似乎没有从parentgap的关系序列通过FACT关系。
如果这是真的,那么您的查询将按预期工作,并且不会找到任何FACT关系。

答案1

这里有一种显示每个路径p和该路径中节点的“factoids”列表的方法。

MATCH p=(parent:FEATURE)-[*]->(gap:GAP)
WHERE parent.name = "Update Profile" AND gap.name contains "CSRF"
UNWIND NODES(p) AS n
RETURN p, REDUCE(
  s = [], t IN COLLECT({n: n, facts: [(n)<-[r:FACT]-(f) | {rel: f, fact: f}]}) |
  CASE WHEN SIZE(t.facts) > 0 THEN s + t ELSE s END) AS factoids

字符串
“factoid”是具有以下属性的Map:

  • n是路径中具有传入FACT关系的节点(即使该关系不在路径上)
  • relFACT关系
  • fact是该FACT关系的源节点

答案二

@Graphileon的精细答案更紧凑,但其结果包含一个多余的空列表,用于每个没有传入FACT关系的路径节点。
这个版本的答案使用apoc.coll.removeAll来删除空列表:

MATCH p=(parent:FEATURE)-[*]->(gap:GAP)
WHERE parent.name = "Update Profile" AND gap.name contains "CSRF"
RETURN p,
       apoc.coll.removeAll(
         [node IN NODES(p) | [fp = (node)<-[:FACT]-(f) | fp ]],
         [[]]) AS factPaths


使用apoc.coll.removeAll删除空列表是为了方便和可读性,但不是必要的。例如,我们可以使用REDUCE代替,如答案#1。

相关问题