apoc将路径变形返回为分组数据

时间:2019-06-02 03:58:32

标签: neo4j cypher neo4j-apoc

这是示例图的屏幕截图:

sample graph

如果我的查询如下:

MATCH (f:Node {key:'someid'}) 
CALL apoc.path.expand(f, 'RELATIONSHIPS', 'FINAL_NODE',-1,-1) yield path as p

RETURN p

在使用浏览器并查看表视图时,数据看起来像是数组中的奇异路径一样返回。数组中的数组。

[
  [
     {red},
     {relationship},
     {teal},
     {relationship},
     {red},
     {relationship},
     {blue},
     {relationship},
     {green}
  ],
  [
     {red},
     {relationship},
     {teal},
     {relationship},
     {red},
     {relationship},
     {blue},
     {relationship},
     {green}
  ],
  etc
]

{}是每个节点和关系的属性。

如果我使用

返回节点(p)

它只是给我所有项目的列表,没有深度,如果我尝试将大小或长度与路径一起使用,在这种情况下它们都是5,而没有给我单独的节点。

我真正想要的是能够重新创建图的级别,因此理想情况下将像这样返回数据:

[
  [
    {red}
  ],[
    {teal},
    {teal},
    {teal},
    {teal},
    {teal},
    {teal}
  ],[
    {red}
  ],[
    {blue},
    {blue},
    {blue},
    {blue},
    {blue},
    {blue},
    {blue}
  ],[
    {green}
  ]
]

使用扩展功能是否可行?还是我需要弄清楚如何通过cypher对立式图案进行相同的处理?

2 个答案:

答案 0 :(得分:1)

应该有可能提出Cypher代码,但是这会花费一些精力并且可能非常复杂。

只考虑以下结果可能会更好:

MATCH p=(f:Red {key:'someid'}<-[:TO_ACTIVE_DRAFT|TO_ATL*]-()-[:SOURCE_FOR_INC]->(g:Green)
RETURN p

并使用某种外部编程语言生成所需的数据。 大多数时候,道路是人们想要的,因此Cypher着眼于此。

答案 1 :(得分:0)

此查询(带有一些假定的节点标签)不使用APOC过程,可能对您有用:

MATCH (f:Node {key:'someid'})
  <-[:TO_ACTIVE_DRAFT]-(t:Teal)
  <-[:ATL_TO_DRAFT]-(r:Red)
  <-[:TO_ACTIVE_DRAFT]-(b:Blue)
  -[:SOURCE_FOR_INC]->(g:Green)
RETURN COLLECT(DISTINCT f), COLLECT(DISTINCT t), COLLECT(DISTINCT r), COLLECT(DISTINCT b), COLLECT(DISTINCT g)