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

how to execute a query after getting response of another query?

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

常量查询1 =g.V().hasLabel('Province').has('code',market').inE('partOf').outV().has('type',state).values('code').as('state') 执行query1后,结果为

res=[{id1},{id2},........]

查询2 = select('state').repeat(has('code',res[0]).inE('partOf').outV().has('type',city).value('name')).times(${res.length-1}).as('city')

我假设您的第一个查询试图找到 "states by market" 其中市场是您打算传递给查询的变量。如果这是正确的,那么您的第一个查询将简化为:

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