【问题标题】:TinkerPop 3 - Get Vertex and edge propertyTinkerPop 3 - 获取顶点和边属性
【发布时间】:2023-03-16 23:14:01
【问题描述】:

我想返回所有具有特定边缘的顶点和添加边缘的日期,但我只是不明白它。

g.V().out("likes").map{it -> it.dateLiked = it.outE("likes").property("addedOn"); it;}

在 SQL 术语中,我可以这样想;

SELECT item.*,
       edge.addedOn
  FROM item_table item,
       edge_mapping_table edge
 WHERE item.id = edge.item_id

【问题讨论】:

    标签: titan gremlin tinkerpop3


    【解决方案1】:

    以下是您可以使用“现代”玩具图作为示例的一种方法:

    gremlin> graph = TinkerFactory.createModern()
    ==>tinkergraph[vertices:6 edges:6]
    gremlin> g = graph.traversal()
    ==>graphtraversalsource[tinkergraph[vertices:6 edges:6], standard]
    gremlin> g.V().outE('knows').as('e').
               inV().as('v').
               select('e','v').by('weight').by(valueMap())
    ==>[e:0.5,v:[name:[vadas],age:[27]]]
    ==>[e:1.0,v:[name:[josh],age:[32]]]
    

    所以,我不想从“likes”边获取“addOn”和“item”顶点的属性,而是想从“knows”边获取“weight”和“person”顶点的属性.在第一行中,我们在“knows”边上遍历并将其标记为“e”,然后我们遍历到相邻的in person 顶点并将其标记为“v”。最后,我们选择这两个标签的值并对它们应用by 转换。 by 以循环方式应用,因此第一个 by 应用于“e”,第二个应用于“v”。

    valueMap 的使用有点方便,但通常您会知道要从顶点检索的数据,就像您知道要从边缘检索的数据一样(即“权重”)。要在没有所有嵌入式 Map 的情况下获得更好的输出,那么您可以这样做:

    gremlin> g.V().outE('knows').as('w').
               inV().as('a','n').
               select('w','a','n').
                 by('weight').by('age').by('name')
    ==>[w:0.5,a:27,n:vadas]
    ==>[w:1.0,a:32,n:josh]
    

    【讨论】:

    • 太棒了,感谢您的迷你课程!出于好奇,是否还有另一个步骤可以再次将其展平以说 [e:0.5, name: vadas, age: 27] ?
    • 我想您可以打开地图,但最好首先更具体地了解您想要的数据。由于您通常不会在 SQL 中执行“从表中选择 *”,因此您通常不会从顶点中获取所有数据。因此,我提出了一个稍微不同的解决方案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-04-20
    • 2019-05-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-25
    相关资源
    最近更新 更多