当前位置: 首页 > 知识库问答 >
问题:

Gremlin遍历

能远
2023-03-14

编辑:在@Prashant回答后,我明白我的输出顺序需要保留,因此我相应地编辑了我的原始问题并重新发布。

g.addV('person').property(id, 1)
g.addV('person').property(id, 2)
g.addV('person').property(id, 3)
g.addV('person').property(id, 4)
g.addV('person').property(id, 5)
g.addV('person').property(id, 6)
g.addV('person').property(id, 7)
g.addV('person').property(id, 8)
g.addV('person').property(id, 9)
g.addV('person').property(id, 10)
g.addV('person').property(id, 11)
g.addV('person').property(id, 12)
g.addV('product').property(id, 13)
g.V(2).addE('related').to(V(1))
g.V(2).addE('related').to(V(5))
g.V(5).addE('related').to(V(6))
g.V(5).addE('related').to(V(7))
g.V(5).addE('related').to(V(9))
g.V(7).addE('related').to(V(8))
g.V(9).addE('related').to(V(4))
g.V(9).addE('related').to(V(10))
g.V(4).addE('related').to(V(3))
g.V(10).addE('related').to(V(11))
g.V(10).addE('related').to(V(12))
g.V(1).addE('chose').to(V(13))
g.V(8).addE('chose').to(V(13))
g.V(9).addE('chose').to(V(13))
g.V(3).addE('chose').to(V(13))
g.V(11).addE('chose').to(V(13))
g.V(12).addE('chose').to(V(13))

我想从根节点(2)遍历到叶节点(1、6、8、3、11和12)。在这种遍历过程中,我希望获取连接到产品节点13(即)的节点,我希望编写一个返回1、8、9、3、11和12的查询。

@Prashant的回答:

g.V().repeat(out().simplePath()).until(out().hasLabel("product")).dedup()

输出

==>v[1]
==>v[9]
==>v[8]
==>v[3]
==>v[11]
==>v[12]

然而,我所需输出的顺序是1、8、9、3、11和12,即在每个级别上,要求选择一个子节点并一直遍历到其叶节点。树的每个级别上的节点顺序保证为升序。有什么需要帮忙的吗?谢谢

共有1个答案

刘俊语
2023-03-14

下面的查询应该做的工作。

g.V().repeat(out().simplePath()).until(out().hasLabel("product")).dedup()
 类似资料:
  • 如何从Java对象输出Gremlin查询?默认输出()看起来像这不容易阅读。

  • 我试图使用Gremlin从一个起始节点向外遍历到连接X度内的所有连接节点。连接的方向无关紧要,所以我使用了函数。我还希望能够防止遍历与特定标签相交。这是一个示例图。 到目前为止,我进行的遍历如下所示: 然而,这并不是我所寻找的。我想要一些实际上可以防止遍历者在必须跨越指定边缘时触及顶点的东西。我当前的实现过滤具有传入边缘的顶点,但在某些情况下,如果遍历者跨越不同的边缘到达那里,我可能仍然希望该顶点

  • 我有图表(见下图)。我使用A中的gremlin,需要沿着边缘“impacts”和“Similato”循环所有树。 所以我需要这样的东西: 此查询的问题是,关系“相似”有时可能是边缘外,有时可能是边缘内(见图),这取决于应用程序当前存储数据的方式。我不能简单地使用“两者”(g. v(A. id).都('影响','相似')...)来检索边,因为另一方面,我只需要“影响”关系的边缘。也有可能,某些顶点缺

  • 我有一个具有两个顶点的简单图,ID为“a”和“b”。 我已将标签为“foo”的边从“a”分配给“b” 小妖精 == == 小妖精 == 我的问题是:如何沿同一条边向后移动?例如,如果一个查询遍历到一个出站顶点,那么该查询如何穿越同一条边返回到入站顶点? 我的查询如下: g、 E('04b4b9fd-2f20-751d-5673-5aa9d7ce0285').outV()。作为('outV')…[要

  • 我只想遍历一棵树并聚合父树及其直接子树。我该如何使用Gremlin将其聚合到({parent1,child},{child,child1}…}的结构列表数组中 在这种情况下,我想输出 订单并不重要。此外,请注意,我希望避免仅在同一节点上存在的任何圆形边(从子顶点到父顶点不可能存在圆形循环) 每个顶点都有一个标签城市,每个边都有一个标签高速公路 我的查询超时了,我想知道是否有更快的方法来实现这一点。