Arrays Cypher LinkedList-如何获取长度?

Arrays Cypher LinkedList-如何获取长度?,arrays,neo4j,cypher,Arrays,Neo4j,Cypher,继续讨论作为可行数组的linkedlist,其中每个跃点深度表示可以排序的索引: 我最近一直在尝试捕获属于父节点的每个阵列的报告。此报表包括唯一的relationshiptype和链表数组中元素的计数: [ { reltype : "123A_RelationshipTitleOne", depthcount : 5 }, { reltype : "123A_RelationshipTitleTwo", depthco

继续讨论作为可行数组的linkedlist,其中每个跃点深度表示可以排序的索引:

我最近一直在尝试捕获属于父节点的每个阵列的报告。此报表包括唯一的relationshiptype和链表数组中元素的计数:

[
   {
      reltype    : "123A_RelationshipTitleOne",
      depthcount : 5
   }, {
      reltype    : "123A_RelationshipTitleTwo",
      depthcount : 9
   }, {
      reltype    : "123A_RelationshipTitleThree",
      depthcount : 42
   }
]

我们接近解决方案,但查询时间非常慢,计数量是预期值的两倍

在stackoverflow上,我们记录了对linkedlist类似数组的功能的查询,包括在开始时取消移位、在索引处插入、在索引处替换以及在“数组”的末尾推送

我希望在数组长度特性方面也能得到帮助

我非常感谢你能提供的帮助。

类似于

MATCH p = (a:Head {id:234})-[:NEXT*..20]->(b:End)
RETURN max(length(path))
差不多

MATCH p = (a:Head {id:234})-[:NEXT*..20]->(b:End)
RETURN max(length(path))

这可能是您正在寻找的:

MATCH (n { id: '123A' })
OPTIONAL MATCH p=(n)-[r*]->(c)
WHERE (type(r[0]) STARTS WITH '123A') AND NOT (c)-->()
RETURN n, COLLECT({ id: type(r[0]), depth: length(p)}) AS leafreport;
NOT(c)-->()
测试用于确保查询只收集“完整路径”,而不是部分路径。这假设在这个用例中,每个链表都以一个没有传出关系的节点结束

这显示了一些示例数据的结果

注:

  • 如果未找到
    n
    ,则不会返回任何行
  • 如果找到了
    n
    ,但没有类型以“123A”开头的初始关系,则
    leafreport
    将是
    [{id:null,depth:null}]
  • neo4j 2.3中引入了以“123A”开头的
    x
    语法。在以前的版本中,您必须使用可读性较差的regexp:
    x=~“123A.*”

  • 这可能是您正在寻找的:

    MATCH (n { id: '123A' })
    OPTIONAL MATCH p=(n)-[r*]->(c)
    WHERE (type(r[0]) STARTS WITH '123A') AND NOT (c)-->()
    RETURN n, COLLECT({ id: type(r[0]), depth: length(p)}) AS leafreport;
    
    NOT(c)-->()
    测试用于确保查询只收集“完整路径”,而不是部分路径。这假设在这个用例中,每个链表都以一个没有传出关系的节点结束

    这显示了一些示例数据的结果

    注:

  • 如果未找到
    n
    ,则不会返回任何行
  • 如果找到了
    n
    ,但没有类型以“123A”开头的初始关系,则
    leafreport
    将是
    [{id:null,depth:null}]
  • neo4j 2.3中引入了以“123A”开头的
    x
    语法。在以前的版本中,您必须使用可读性较差的regexp:
    x=~“123A.*”

  • 非常感谢你的帮助,尽管我仍然有困难。在这个zip中,我包含了两个场景的json输出(一个有2个子节点,另一个有6个子节点)seadesyndication.com/cypher.zip标记为initial的文件是MATCH()-[r:
    123A_Foo
    ]->()RETURN的结果,其他文件是上述查询的派生。第一个示例(w/2children)中的子对象仅具有123A_-Foo关系,而另一个示例中的子对象具有多个关系。两个查询都运行得比较慢,因为我认为查询在COLLECT上循环太多。6个子节点示例通常会挂起,而带有查询的2个子节点示例会返回一个包含9个元素的leafreport,而不是一个包含[{id:123A_-Foo,depth:2}或{id:123A_-Foo,depth:3}]的项非常感谢你的帮助,尽管我仍然有困难。在这个zip中,我包含了两个场景的json输出(一个有2个子节点,另一个有6个子节点)seadesyndication.com/cypher.zip标记为initial的文件是MATCH()-[r:
    123A_Foo
    ]->()RETURN的结果,其他文件是上述查询的派生。第一个示例(w/2children)中的子对象仅具有123A_-Foo关系,而另一个示例中的子对象具有多个关系。这两个查询都运行得比较慢,因为我认为查询在COLLECT上循环太多。6个子节点示例通常会挂起,而带有查询的2个子节点示例会返回一个包含9个元素的leafreport,而不是一个在数组中找到[{id:123A_-Foo,depth:2}或{id:123A_-Foo,depth:3}]的项