查询结果排序
Gremlin允许对查询的结果进行排序输出,可以指定按某个属性的升序、降序或者随机序的方式输出。排序方式可以通过单独的order()
或者order().by()
指定。
单独使用order()
:一般用于遍历器中的元素是属性时。order()
会将结果以升序输出。
order()
单独使用时,必须保证遍历器(traverser)中的元素是可排序的,在java里就是必须实现java.lang.Comparable
接口,否则会抛出异常。
联合使用order().by()
,传入排序方式,一般用于遍历器中的元素是属性时:
order().by(incr)
:将结果以升序输出,这也是默认的排序方式order().by(decr)
:将结果以降序输出order().by(shuffle)
:将结果以随机序输出,每次执行结果顺序都可能不一样
使用
order().by()
且by()
传递的仅是一个排序方式的参数时,也必须保证遍历器(traverser)中的元素是可排序的
联合使用order().by()
,传入属性和排序方式,用于遍历器中的元素是顶点或者边时:
order().by(key)
:将结果按照元素属性key的值升序排序,与order().by(key, incr)
等效order().by(key, incr)
:将结果按照元素属性key的值升序排序order().by(key, decr)
:将结果按照元素属性key的值降序排序order().by(key, shuffle)
:将结果按照元素属性key的值随机序排列,每次执行的结果都可能不一样
by()
step不是一个真正的step,而是”step modulator”,与此类似的还有as()
和option()
step。通过
by()
step可以为某些step添加traversal、funcation、comparator等,通常的使用方式是step().by()...by()
,某些step只能添加一个by()
,而有一些可以添加任意数量的by()
step。
示例:
将 label=’person’的顶点的”age”属性按顺序输出(最后输出的是”age”属性的值)
// 默认顺序(升序)输出 label='person'的顶点的"age"属性值
g.V().hasLabel('person').values('age').order()
// 指定以升序输出
g.V().hasLabel('person').values('age').order().by(incr)
// 指定以降序输出
g.V().hasLabel('person').values('age').order().by(decr)
// 或者
g.V().hasLabel('person').values('age').order().by(desc)
// 按照随机序输出
g.V().hasLabel('person').values('age').order().by(shuffle)
将 label=’person’的顶点,按照”age”属性排序输出顶点(最后输出的是顶点信息)
// 按照"age"属性默认顺序(升序)输出顶点
g.V().hasLabel('person').order().by('age')
// 按照"age"属性升序输出顶点
g.V().hasLabel('person').order().by('age', incr)
// 按照"age"属性降序输出顶点
g.V().hasLabel('person').order().by('age', incr)
// 或者
g.V().hasLabel('person').order().by('age', desc)
// 按照"age"属性随机序输出顶点
g.V().hasLabel('person').order().by('age', shuffle)