如何从外部顶点列表中删除循环顶点列表
How to remove cyclic vertex list from list of outer vertexes
我是 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();
你能帮我找到准确的查询来满足我的要求吗?
听起来您想使用 SimplePath。请在此处查看文档 - http://tinkerpop.apache.org/docs/current/reference/#simplepath-step
所以您基本上想要过滤掉具有 in
和 out
到特定顶点的边的顶点。
这是您的示例图表:
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]
我是 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();
你能帮我找到准确的查询来满足我的要求吗?
听起来您想使用 SimplePath。请在此处查看文档 - http://tinkerpop.apache.org/docs/current/reference/#simplepath-step
所以您基本上想要过滤掉具有 in
和 out
到特定顶点的边的顶点。
这是您的示例图表:
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]