得到另一个查询的响应后如何执行查询?

时间:2019-08-06 10:41:32

标签: gremlin janusgraph

我需要第一个查询的结果将其作为输入参数传递给第二个查询。并且还想知道编写多个查询。 在我的用例中,只能使用第一个查询的结果遍历第二个查询,也可以使用循环(类似于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')

1 个答案:

答案 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())