【问题标题】:How to remove cyclic vertex list from list of outer vertexes如何从外部顶点列表中删除循环顶点列表
【发布时间】:2017-05-07 19:12:04
【问题描述】:

我是 dse 图中的新手,我想创建 gremlin 查询,它为我提供了从指定顶点链接的所有顶点的列表,但我想从这个列表中删除那些循环链接的列表。

e.g.

A --> B
A --> C
A --> D
B --> A

如果我有上述关系,那么我想要下面的顶点列表作为结果

[C,D]

B和A不应该在上面的列表中,因为它有循环关系

我有以下两个单独的查询来查找所有链接的顶点并查找循环顶点

g.V().has('id','id').as('mainV').outE('Prerequisite').inV();

g.V().has('id','id').as('mainV').out().out().cyclicPath().path().unfold().dedup();

你能帮我找到准确的查询来满足我的要求吗?

【问题讨论】:

  • 如果B不应该在列表中,因为它与A有循环关系,那么为什么A在列表中?与B有循环关系。
  • 这是我的错误,我更正了,结果只有 C 和 D

标签: datastax gremlin datastax-enterprise-graph


【解决方案1】:

因此,您基本上想要过滤掉具有inout 边缘到特定顶点的顶点。

这是您的示例图:

gremlin> g = TinkerGraph.open().traversal()
==>graphtraversalsource[tinkergraph[vertices:0 edges:0], standard]
gremlin> g.addV().property(id, "A").as("a").
......1>   addV().property(id, "B").as("b").
......2>   addV().property(id, "C").as("c").
......3>   addV().property(id, "D").as("d").
......4>   addE("link").from("a").to("b").
......5>   addE("link").from("a").to("c").
......6>   addE("link").from("a").to("d").
......7>   addE("link").from("b").to("a").iterate()

这就是您要查找的遍历:

gremlin> g.V().as("a").not(out().out().where(eq("a"))).not(__.in().in().where(eq("a")))
==>v[C]
==>v[D]

【讨论】:

    【解决方案2】:

    听起来您想使用 SimplePath。请在此处查看文档 - http://tinkerpop.apache.org/docs/current/reference/#simplepath-step

    【讨论】:

    • 感谢您的回复,但这也会在结果中给出循环顶点。我想从列表中删除顶点,该顶点将以循环方式与指定顶点链接
    猜你喜欢
    • 2011-06-06
    • 2018-01-02
    • 2013-06-14
    • 2014-01-17
    • 2019-01-03
    • 1970-01-01
    • 1970-01-01
    • 2021-05-31
    • 2021-09-06
    相关资源
    最近更新 更多