我需要第一个查询的结果将其作为输入参数传递给第二个查询。并且还想知道编写多个查询。 在我的用例中,只能使用第一个查询的结果遍历第二个查询,也可以使用循环(类似于for循环)遍历第二个查询
const query1 = g.V().hasLabel('Province').has('code',market').inE('partOf').outV().has('type',state).values('code').as('state')
执行查询1后,结果为
res=[{id1},{id2},........]
query2 = select('state').repeat(has('code',res[0]).inE('partOf').outV().has('type',city).value('name')).times(${res.length-1}).as('city')
答案 0 :(得分:1)
我假设您的第一个查询试图查找“市场状态”,其中市场是您打算传递给查询的变量。如果正确,那么您的第一个查询将简化为:
g.V().hasLabel('Province').has('code',market).
in('partOf').
has('type','state').values('code')
因此,当不需要对边缘属性进行过滤时,优选in()
胜过inE().outV()
。
您的第二个查询看起来不像有效的Gremlin,但也许您只是想提供一个您想做的事的例子。您写道:
select('state').
repeat(has('code',res[0]).
inE('partOf').outV().
has('type',city).value('name')).
times(${res.length-1}).as('city')
,我认为这意味着您要使用在第一个查询中找到的州来查找其城市。如果是这样,您可以将其简化为以下单个查询:
g.V().hasLabel('Province').has('code',market).
in('partOf').has('type','state').
in('partOf').has('type','city').
values('name')
如果您需要有关州和城市的数据作为结果的一部分,请考虑project()
:
g.V().hasLabel('Province').has('code',market).
in('partOf').has('type','state').
project('state','cities').
by('code').
by(__.in('partOf').has('type','city').
values('name').
fold())