【问题标题】:Simplest way to implement a Row Number in Gremlin在 Gremlin 中实现行号的最简单方法
【发布时间】:2020-09-12 23:58:11
【问题描述】:

我需要为图表中的所有顶点分配一个唯一的递增值。在 SQL 中,我会使用 ROW_NUMBER。 Gremlin有简单的方法吗?我希望是这样的:

g.V().<some_step>()

输出:

1
2
3
...

【问题讨论】:

    标签: auto-increment gremlin


    【解决方案1】:

    我不认为我会在大图上尝试此操作,但对于中等大小的图,您可以尝试使用 index 步骤。下面是一个使用航线数据集的示例。

    index 将递增的索引值添加到列表中。

    gremlin> g.V().limit(5).fold().index().unfold()
    ==>[v[0],0]
    ==>[v[1],1]
    ==>[v[2],2]
    ==>[v[3],3]
    ==>[v[4],4]
    

    使用local 范围,您可以访问该列表的成员。

    gremlin> g.V().limit(5).fold().index().unfold().limit(local,1)
    ==>v[0]
    ==>v[1]
    ==>v[2]
    ==>v[3]
    ==>v[4]
    

    使用这些技术,我们可以使用索引值向每个机场添加新属性。在这个例子中,我只做了前 5 个。

    gremlin> g.V().limit(5).
                   fold().index().unfold().as('list').
                   limit(local,1).
                   property('index',select('list').tail(local))
    
    ==>v[0]
    ==>v[1]
    ==>v[2]
    ==>v[3]
    ==>v[4]
    

    并检查结果。

    gremlin> g.V(1).valueMap()
    ==>[country:[US],code:[ATL],longest:[12390],city:[Atlanta],index:[1],lon:[-84.4281005859375],type:[airport],elev:[1026
    ],icao:[KATL],region:[US-GA],runways:[5],lat:[33.6366996765137],desc:[Hartsfield - Jackson Atlanta International Airpo
    rt]]
    
    
    gremlin> g.V(2).valueMap()
    ==>[country:[US],code:[ANC],longest:[12400],city:[Anchorage],index:[2],lon:[-149.996002197266],type:[airport],elev:[15
    1],icao:[PANC],region:[US-AK],runways:[3],lat:[61.1744003295898],desc:[Anchorage Ted Stevens]]
    

    【讨论】:

      【解决方案2】:

      Gremlin 中没有这样的步骤,我不知道有任何图形数据库本身具有这种功能。也许gsql 也许是因为它有关系数据库的支持?我认为您需要在图形外部管理数字并使用某种形式的锁定机制自己跟踪它。

      【讨论】:

        猜你喜欢
        • 2010-12-01
        • 2023-03-20
        • 2011-03-21
        • 1970-01-01
        • 2010-10-27
        • 1970-01-01
        • 1970-01-01
        • 2013-08-07
        相关资源
        最近更新 更多