【问题标题】:Retrieve all IDs for duplicate vertices in Gremlin检索 Gremlin 中重复顶点的所有 ID
【发布时间】:2020-05-27 23:12:10
【问题描述】:

问题

我正在运行通过name 属性查找重复顶点的查询。我想知道 all 对应顶点的 ID。

此时只返回where子句中的id。

示例图

这是一个玩具示例图。有两个同名的顶点ex

==>tinkergraph[vertices:0 edges:0]
gremlin> g = graph.traversal()
==>graphtraversalsource[tinkergraph[vertices:0 edges:0], standard]
gremlin> g.addV('X').property('name', 'ex')
==>v[0]
gremlin> g.addV('Y').property('name', 'why')
==>v[2]
gremlin> g.addV('Y').property('name', 'ex')
==>v[4]
gremlin> g.V().elementMap()
==>[id:0,label:X,name:ex]
==>[id:2,label:Y,name:why]
==>[id:4,label:Y,name:ex]

检测重复项

当我找到重复项并获得 elementMap() 时,ID 仅适用于在 where 子句中匹配的顶点。

gremlin> g.V().hasLabel('X').as('x').V().hasLabel('Y').as('y').where('x', P.eq('y')).by('name').elementMap()
==>[id:4,label:Y,name:ex]

而我希望看到idid:0id:4

我想要类似的东西:

==>[[id:0,label:X,name:ex], [id:4,label:Y,name:ex]]

【问题讨论】:

    标签: gremlin gremlin-server gremlinpython


    【解决方案1】:

    其实你已经很接近了

    gremlin> g.V().hasLabel('X').as('x').
    ......1>   V().hasLabel('Y').as('y').
    ......2>   where(eq('x')).by('name').
    ......3>   select('x','y').
    ......4>     by(valueMap().by(unfold()).
                    with(WithOptions.tokens)).
    ......5>   select(values)
    
    ==>[[id:0,label:X,name:ex],[id:4,label:Y,name:ex]]     
    

    【讨论】:

      猜你喜欢
      • 2016-05-28
      • 2021-10-11
      • 1970-01-01
      • 1970-01-01
      • 2019-08-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-01-15
      相关资源
      最近更新 更多