Gremlin 遍历
Posted
技术标签:
【中文标题】Gremlin 遍历【英文标题】:Gremlin Traversal 【发布时间】:2021-12-21 11:22:16 【问题描述】:已编辑:在@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】:下面的查询应该可以完成这项工作。
g.V().repeat(out().simplePath()).until(out().hasLabel("product")).dedup()
【讨论】:
当我尝试你的答案时,我意识到输出节点的顺序对我的要求很重要。所以我编辑了我的问题。让我知道,如果你能在这里帮助我?谢谢!! @Bala 依赖数据库保存数据的顺序并不是一个好习惯。因为 gremlin 服务器的不同实现可以保留不同的索引,这会影响您获得的顺序。因此,如果您有一个可用于对结果集进行排序的属性,您将能够编写一个查询,该查询将为您提供与服务器索引相同的顺序。如果不是,IMO 认为你做得不对。 同意,我不依赖索引。这是我创建的一个示例问题,用于复制我的实际场景。所以为了简单起见,我依赖于索引。在我的实际情况下,我会有事件创建时间,即)4(和 3)、10(和 11、12)可以交换,但它们的事件创建时间属性将帮助我对结果集进行排序。 在这种情况下,您可以使用order().by()
附加有问题的查询。通过步骤可以使用您要使用的属性命令。这对您的需要有帮助吗?以上是关于Gremlin 遍历的主要内容,如果未能解决你的问题,请参考以下文章
进入gremlin console退出gremlin console
Neo4j - Cypher vs Gremlin 查询语言
Rexster 上的 gremlin 控制台(http://localhost:8182/doghouse/main/gremlin/graph)不工作