1
g.V().
has('organizationId', 'b121672e-8049-40cc-9f28-c62dff4cc2d9').

hasLabel('employee').
or
(
    has('firstName', containing('K')),
    has('lastName', containing('K')),
    has('department', containing('K'))
).
order().
by('lastName').
project('EmployeeId', 'FirstName', 'LastName','Status', 'EndDate', 'WorkLocation', 'LastHealthCheck', 'Nearby', 'Frequent', 'Department', 'ConfirmationDate' ).
by(id).
by('firstName').
by('lastName').
by('status').
by('endDate').
by('workLocation').
by('lastHealthCheckUp').
by('nearby').
by('frequent').
by('department').
by('confirmationDate')

该查询用于获取员工详细信息,但我想对所有字段进行动态排序,例如:从 UI 假设 FirstName 参数作为升序/降序传递,那么查询应该按升序或降序执行排序,我已经执行了排序,但查询只接受升序作为单个参数,我希望我的查询接受排序参数并基于它对所有提到的字段执行排序。

4

1 回答 1

1

拥有“模式”的一种方法是使用这样的公式。我使用 air-routes 数据集来构建这个示例。withSideEffect您可以使用 a或injectstep将值传递给您的代码。

gremlin> g.inject('asc').as('mode').
......1>   V(1,2,3,4,5).
......2>   choose(select('mode').is('asc'),
......3>               order().by('city',asc),
......4>               order().by('city',desc)).
......5>   values('city')  
==>Anchorage
==>Atlanta
==>Austin
==>Boston
==>Nashville

gremlin> g.inject('desc').as('mode').
......1>   V(1,2,3,4,5).
......2>   choose(select('mode').is('asc'),
......3>               order().by('city',asc),
......4>               order().by('city',desc)).
......5>   values('city') 
==>Nashville
==>Boston
==>Austin
==>Atlanta
==>Anchorage   

编辑添加:

您还可以使用注入的键名进行排序。valueMap 的语法是必要的,因为简单地做是by(select('key'))行不通的。

gremlin>   g.inject('city').as('key').
......1>     V(1,2,3,4,5,6,7,8,9).
......2>     order().by(valueMap().select(select('key')).unfold()).
......3>     values('city')   

==>Anchorage
==>Atlanta
==>Austin
==>Baltimore
==>Boston
==>Dallas
==>Fort Lauderdale
==>Nashville
==>Washington D.C. 

进一步编辑添加:将它们放在一起,您可以更进一步,并提供用于对查询进行排序的模式和键。

gremlin>  g.inject([key:'city',mode:'desc']).as('p').
......1>     V(1,2,3,4,5,6,7,8,9).
......2>     choose(select('p').select('mode').is('asc'),
......3>                 order().by(valueMap().select(select('p').select('key')).unfold()),
......4>                 order().by(valueMap().select(select('p').select('key')).unfold(),desc)).
......5>     values('city')

==>Washington D.C.
==>Nashville
==>Fort Lauderdale
==>Dallas
==>Boston
==>Baltimore
==>Austin
==>Atlanta
==>Anchorage          
于 2020-06-15T14:06:58.620 回答