深入学习Gremlin(4):图查询返回结果数限制

深入学习Gremlin(4):图查询返回结果数限制

第4期 Gremlin Steps:

count()range()limit()tail()skip()

本系列文章的Gremlin示例均在HugeGraph图数据库上执行,环境搭建可参考准备Gremlin执行环境,本文示例均以其中的“TinkerPop关系图”为初始数据。

TinkerPop关系图

上一期:深入学习Gremlin(3):图的条件查询

图查询返回结果数限制说明

Gremlin能统计查询结果集元素的个数,且允许从结果集中做范围截取。假设某个查询操作(如:g.V())的结果集包含8个元素,我们可以从这8个元素中截取指定部分。主要包括:

  • range(m, n): 指定下界和上界的截取,左闭右开。比如range(2, 5)能获取第2个到第4个元素(0作为首个元素);
  • limit(n): 下界固定为0,指定上界的截取,等效于range(0, n),语义是“获取前n个元素”。比如limit(3)能获取前3个元素;
  • tail(n): 上界固定为-1,指定下界的截取,等效于range(count - n, -1),语义是“获取后n个元素”。比如tail(2)能获取最后的2个元素;
  • skip(n): 上界固定为-1,指定下界的截取,等效于range(n, -1),语义是“跳过前n个元素,获取剩余的元素”。比如skip(6)能跳过前6个元素,获取最后2个元素。

实例讲解

下面通过实例来深入理解每一个操作。

  1. Step count():查询当前traverser中的元素的个数,元素可以是顶点、边、属性、路径等。

    示例1:查询图中所有顶点的个数

    g.V().count()
          
          
    • 1

    TinkerPop关系图的圆点就是顶点,总共12个。

    示例2:查询图中类型为“人person”的顶点数

    g.V().hasLabel('person').count()
          
          
    • 1

    TinkerPop关系图的绿点就是类型为“人person”的顶点,共7个。

    示例3:查询图中所有的 “人创建created” 的边数

    g.V().hasLabel('person').outE('created').count()
          
          
    • 1

    TinkerPop关系图的所有从绿点(person)出发并且连线上为“created”的边,共8个。

    示例4:查询图中所有顶点的属性数

    g.V().properties().count()
          
          
    • 1

    TinkerPop关系图的所有顶点的属性共47个,其中“人person”共有28个,“软件software”共有19个,大家可以自己数一数。

  2. Step range():限定查询返回的元素的范围,上下界表示元素的偏移量,左闭右开。下界以“0”作为第一个元素,上界为“-1”时表示取到最后的元素。

    示例1:不加限制地查询所有类型为“人person”的顶点

    g.V().hasLabel('person').range(0, -1)
          
          
    • 1

    示例2:查询类型为“人person”的顶点中的第2个到第5个

    g.V().hasLabel('person').range(2, 5)
          
          
    • 1

    示例3:查询类型为“人person”的顶点中的第5个到最后一个

    g.V().hasLabel('person').range(5, -1)
          
          
    • 1

  3. Step limit():查询前“n”个元素,相当于range(0, n)

    示例1:查询前两个顶点

    g.V().limit(2)
          
          
    • 1

    示例2:查询前三条边

    g.E().limit(3)
          
          
    • 1

  4. Step tail():与limit()相反,它查询的是后“n”个元素,相当于range(count - n, -1)

    示例1:查询后两个顶点

    g.V().tail(2)
          
          
    • 1

    示例2:查询后三条边

    g.E().tail(3)
          
          
    • 1

  5. Step skip():跳过前“n”个元素,获取剩余的全部元素

    skip()在HugeGraph中(tinkerpop 3.2.5)中尚不支持,下面给出代码以及预期的结果。

    // 跳过前5个,skip(5)等价于range(5, -1)
    g.V().hasLabel('person').skip(5)
          
          
    • 1
    • 2


深入学习Gremlin(4):图查询返回结果数限制

第4期 Gremlin Steps:

count()range()limit()tail()skip()

本系列文章的Gremlin示例均在HugeGraph图数据库上执行,环境搭建可参考准备Gremlin执行环境,本文示例均以其中的“TinkerPop关系图”为初始数据。

TinkerPop关系图

上一期:深入学习Gremlin(3):图的条件查询

图查询返回结果数限制说明

Gremlin能统计查询结果集元素的个数,且允许从结果集中做范围截取。假设某个查询操作(如:g.V())的结果集包含8个元素,我们可以从这8个元素中截取指定部分。主要包括:

  • range(m, n): 指定下界和上界的截取,左闭右开。比如range(2, 5)能获取第2个到第4个元素(0作为首个元素);
  • limit(n): 下界固定为0,指定上界的截取,等效于range(0, n),语义是“获取前n个元素”。比如limit(3)能获取前3个元素;
  • tail(n): 上界固定为-1,指定下界的截取,等效于range(count - n, -1),语义是“获取后n个元素”。比如tail(2)能获取最后的2个元素;
  • skip(n): 上界固定为-1,指定下界的截取,等效于range(n, -1),语义是“跳过前n个元素,获取剩余的元素”。比如skip(6)能跳过前6个元素,获取最后2个元素。

实例讲解

下面通过实例来深入理解每一个操作。

  1. Step count():查询当前traverser中的元素的个数,元素可以是顶点、边、属性、路径等。

    示例1:查询图中所有顶点的个数

    g.V().count()
        
        
    • 1

    TinkerPop关系图的圆点就是顶点,总共12个。

    示例2:查询图中类型为“人person”的顶点数

    g.V().hasLabel('person').count()
        
        
    • 1

    TinkerPop关系图的绿点就是类型为“人person”的顶点,共7个。

    示例3:查询图中所有的 “人创建created” 的边数

    g.V().hasLabel('person').outE('created').count()
        
        
    • 1

    TinkerPop关系图的所有从绿点(person)出发并且连线上为“created”的边,共8个。

    示例4:查询图中所有顶点的属性数

    g.V().properties().count()
        
        
    • 1

    TinkerPop关系图的所有顶点的属性共47个,其中“人person”共有28个,“软件software”共有19个,大家可以自己数一数。

  2. Step range():限定查询返回的元素的范围,上下界表示元素的偏移量,左闭右开。下界以“0”作为第一个元素,上界为“-1”时表示取到最后的元素。

    示例1:不加限制地查询所有类型为“人person”的顶点

    g.V().hasLabel('person').range(0, -1)
        
        
    • 1

    示例2:查询类型为“人person”的顶点中的第2个到第5个

    g.V().hasLabel('person').range(2, 5)
        
        
    • 1

    示例3:查询类型为“人person”的顶点中的第5个到最后一个

    g.V().hasLabel('person').range(5, -1)
        
        
    • 1

  3. Step limit():查询前“n”个元素,相当于range(0, n)

    示例1:查询前两个顶点

    g.V().limit(2)
        
        
    • 1

    示例2:查询前三条边

    g.E().limit(3)
        
        
    • 1

  4. Step tail():与limit()相反,它查询的是后“n”个元素,相当于range(count - n, -1)

    示例1:查询后两个顶点

    g.V().tail(2)
        
        
    • 1

    示例2:查询后三条边

    g.E().tail(3)
        
        
    • 1

  5. Step skip():跳过前“n”个元素,获取剩余的全部元素

    skip()在HugeGraph中(tinkerpop 3.2.5)中尚不支持,下面给出代码以及预期的结果。

    // 跳过前5个,skip(5)等价于range(5, -1)
    g.V().hasLabel('person').skip(5)
        
        
    • 1
    • 2


猜你喜欢

转载自blog.csdn.net/linlin1989117/article/details/82625979