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')
查询是用来获取员工信息的,但我想动态地对所有字段进行排序,例如:从用户界面上看,比如FirstName参数传递为升序或降序,那么查询应该按升序或降序进行排序,我已经进行了排序,但查询只接受升序作为单个参数,我想让我的查询接受排序参数,并根据它对所有提到的字段进行排序。
有一个'模式'的方法是使用这样的公式。我使用air-routes数据集来构建这个例子。你可以将值传递到你的代码中,使用一个 withSideEffect
或 inject
步。
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