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

Gremlin 如何在得到另一个查询的响应后执行查询?,gremlin,janusgraph,Gremlin,Janusgraph,我需要第一个查询的结果将其作为输入参数传递给第二个查询。还想知道如何编写多个查询。 在我的用例中,只能使用第一个查询的结果遍历第二个查询,也可以使用循环遍历第二个查询(类似于for循环) const query1=g.V().hasLabel('Province').has('code',market').inE('partOf').outV().has('type',state')。value('code')。as('state') 执行query1后,结果为 res=[{id1},{id2}

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

const query1=
g.V().hasLabel('Province').has('code',market').inE('partOf').outV().has('type',state')。value('code')。as('state')
执行query1后,结果为

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

我假设您的第一个查询尝试查找“市场状态”,其中市场是您打算传递给查询的变量。如果这是正确的,那么您的第一个查询将简化为:

g.V().hasLabel('Province').has('code',market).
  in('partOf').
  has('type','state').values('code')
因此,当不需要对边缘属性进行过滤时,最好选择
in()
而不是
inE().outV()

您的第二个查询看起来不像有效的小精灵,但可能您只是想提供一个示例,说明您想要做什么。你写道:

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

如果需要有关状态和城市的数据作为结果的一部分,则考虑<代码>项目()<代码>:


我不太明白你的问题。第二个代码块中的
res
是什么?我假设这是第一个代码块的“结果”,但赋值在哪里?你提到你对“多重查询”感兴趣,但我不确定你的意思。请添加更多代码/上下文以帮助澄清您的问题。我看到您编辑了您的问题,我试图回答,但我仍然需要对您想在这里做什么做很多假设。如果我的答案不完全符合您的要求,我建议您在下一次澄清答案时,提供一个创建一些样本数据的Gremlin脚本-以下是一个示例,您的假设是正确的,但不仅是市-省的属性,而且我还需要州数据。
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())