如何在Gremlin查询中执行排序?

问题描述 投票:0回答: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')

查询是用来获取员工信息的,但我想动态地对所有字段进行排序,例如:从用户界面上看,比如FirstName参数传递为升序或降序,那么查询应该按升序或降序进行排序,我已经进行了排序,但查询只接受升序作为单个参数,我想让我的查询接受排序参数,并根据它对所有提到的字段进行排序。

tinkerpop tinkerpop3 azure-cosmosdb-gremlinapi tinker tinkergraph
1个回答
1
投票

有一个'模式'的方法是使用这样的公式。我使用air-routes数据集来构建这个例子。你可以将值传递到你的代码中,使用一个 withSideEffectinject 步。

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          
© www.soinside.com 2019 - 2024. All rights reserved.