【问题标题】:Gremlin query to list out all the edges by the same labelGremlin 查询以列出相同标签的所有边
【发布时间】:2021-06-19 03:44:56
【问题描述】:

我尝试了与我的请求匹配的不同查询,但找不到它。抱歉,这是重复的。 我有两个顶点Vertex1Vertex2。有一条边从Vertex1 连接到Vertex2,标签为relation 属性{name: "Test1"}。同样,从Vertex1 连接到Vertex2 的还有一条边,其标签与relation 相同,但属性与{name: "Test2"} 相同。附图显示了顶点及其关系。

如何列出所有的关系?

Query1: g.V('Vertex1').outE().hasLabel('relation') => 仅列出第一个关系,即具有属性 {name: "Test1"} 的关系。

Query2: g.V('Vertex1').outE().as("c").select("c").by(valueMap()).toList() => 列出所有关系,包括标签为“relation”的边。

如果我稍微调整一下以包含要查询的标签名称 g.V('Vertex1').outE('relation').as("c").select("c").by(valueMap()).toList() => 然后再次只获得第一个边缘。 我正在尝试使用标签“relation”及其属性获取边缘的属性,例如

{id=Edge1-ID1, label=relation, name=Test1}

{id=Edge1-ID2, label=relation, name=Test2}

【问题讨论】:

    标签: gremlin janusgraph tinkerpop


    【解决方案1】:

    我不确定出了什么问题,但你的第一次尝试基本上是正确的,因为 Gremlin 语法:

    gremlin> g.addV().property(id,'Vertex1').as('v1').
    ......1>   addV().property(id,'Vertex2').as('v2').
    ......2>   addE('relation').from('v1').to('v2').property('name','Test1').
    ......3>   addE('relation').from('v1').to('v2').property('name','Test2').iterate()
    gremlin> g.V('Vertex1').outE('relation')
    ==>e[0][Vertex1-relation->Vertex2]
    ==>e[1][Vertex1-relation->Vertex2]
    gremlin> g.V('Vertex1').outE('relation').values('name')
    ==>Test1
    ==>Test2
    

    我在这里唯一的想法是,也许你不完全是iterating your traversal?您在其他示例中执行了toList(),但不是第一个。

    【讨论】:

    • 很奇怪,我昨天试了查询 1 没有用。今天在你发帖后,我把它从历史中拉出来重新运行,它现在可以工作了。
    • 要添加上下文,我使用 Java 更新边缘并使用 gremlin 控制台查询它。我需要关闭现有的 gremlin 会话并打开一个新会话,以获取更新的查询结果。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-17
    • 1970-01-01
    相关资源
    最近更新 更多