【问题标题】:How to display all the all the child/parent nodes of the given node of fully nested hierarchy in arangodb如何在arangodb中显示完全嵌套层次结构的给定节点的所有子/父节点
【发布时间】:2020-01-31 10:11:32
【问题描述】:

我们有一个包含 999999 条记录的边缘集合“ChildEvents”

结构:

_from:events/1, _to: events/2

_from:events/2, _to: events/3

在这个结构中node-1是super parent,node-2是node-1的child,node-3是node-2的child。(从上到下嵌套层次结构)

1-->2-->3-->4-->....999999

我的要求是显示给定节点的所有嵌套父/子。 例如。如果我提供节点 - 4,查询应该显示从节点 5 到节点 999999 的子节点。 (我在 neo4J 数据库中使用匹配查询)。

但在 arangoDB 中,当我尝试使用以下查询实现此目的时,它只返回 2 条记录。

****FOR v IN OUTBOUND "events/350" any ChildEvents RETURN v****

有人可以帮忙吗?非常感谢您的帮助。

【问题讨论】:

    标签: arangodb


    【解决方案1】:

    遍历查询要求您声明一个min 值(在我的示例中为“0”),但为了满足您的要求,您还需要声明一个max 值(999999)(参见文档here) .

    此外,术语any 也不会以这种方式使用,尤其是因为您正在寻找出站关系(出站来自一个孩子)。

    FOR v IN 0..999999 OUTBOUND 'events/350'
        ChildEvents
        RETURN v
    
    1. 从 'events' 集合中查找 _key = '350' 的节点
    2. 返回起始节点('events/350')
    3. 返回“events/350”的所有子节点(全部 999,648 个)

    您无需提供“最大值”的确切数字 - 这只是要遍历的边数的上限。

    如果此查询对您不起作用,那么我建议您仔细查看您的优势。您可能有间隙或方向不正确(交换了_from_to)。

    【讨论】:

    • 谢谢克里。所以有上限使我的查询工作,但我觉得这施加了一些限制。如果事件是动态生成的,并且如果我们仅在运行时知道上限,则很难获得结果。如果我比较具有 100 万个节点的 neo4J 产品,我只需要执行此查询 - MATCH({id:1})-[*]-(connected) RETURN connected,它为我提供了来自连接节点的所有父节点和子节点。所以我们在 ArangoDB 中没有这样的等价物?
    • @SolaiSrinivasan,我不知道。我发现limit 有时会受到限制,但我理解它为什么会出现。也就是说,限制不需要与您的实际上限相匹配。将limit 设置为一个非常大的数字(大于您可能遇到的遍历次数)使其基本上是无限的。
    猜你喜欢
    • 2010-09-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-16
    • 2011-08-10
    • 2019-07-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多