【问题标题】:Combining Collections With Gremlin Query将集合与 Gremlin 查询相结合
【发布时间】:2016-04-11 11:15:48
【问题描述】:

您好,我是 Tinkerpop 和 Gremlin 的新手,我正在努力解决我正在尝试执行的遍历。

基本上,我有一组顶点 ID,我想从中遍历并从某些外边找到一组顶点。我想将出边之后的顶点与其来源的准确性相关联。例如: v1 -> e1 -> v2 v1 -> e2 -> v4 v3 -> e3 -> v5 v3 -> e4 -> v6 所以 v1 有 2 个出边(e1 和 e2)到 v2 和 v4,而 v3 有 2 个出边(e3 和 e4)到 v5 和 v6。我想要的是得到一个看起来像这样的遍历结果 [[[v1],[v2,v4]],[v3,[v5,v5]]]

有人可以帮助我使用 Gremlin 进行遍历以帮助我获得该结果吗?我最接近的是这样的 graph.traversal().V(4264,40964144).as('people').map{it.get().vertices(OUT, 'codes_in')}.as('languages').union(select('people'), select('languages'))

【问题讨论】:

    标签: gremlin tinkerpop


    【解决方案1】:

    这是一种使用“现代”toy graph 演示的方法:

    gremlin> graph = TinkerFactory.createModern()
    ==>tinkergraph[vertices:6 edges:6]
    gremlin> g = graph.traversal()
    ==>graphtraversalsource[tinkergraph[vertices:6 edges:6], standard]
    gremlin> g.V(1,4).group().by().by(out().fold())
    ==>[v[1]:[v[3], v[2], v[4]], v[4]:[v[5], v[3]]]
    

    它只使用group()。第一个 by() 调制器代表每个组的键(在本例中为起始顶点),然后第二个 by() 调制器是您在组中想要的(在本例中为 out() 顶点)。请注意,您必须在第二个 by() 中包含 fold() 以强制迭代该内部遍历。

    顺便说一句,graph.traversal() 不是一个好的模式。创建一次TraversalSource 并重复使用它。

    【讨论】:

    • 谢谢斯蒂芬,成功了。比我预期的要容易得多!
    • 其实斯蒂芬,我还有一个问题。我希望结果中也包含 v1 和 v3 的属性。我没有看到您提供的查询会发生这种情况。
    • 我想我找到了一个有效的查询graph.traversal().V(4264,40964144).group().by().by(union(fold(), out()).fold())
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-10
    • 1970-01-01
    • 2018-02-22
    • 2011-02-28
    • 2023-02-10
    • 1970-01-01
    • 2012-08-28
    相关资源
    最近更新 更多