修改 gremlin 查询以添加新字段以及现有字段

问题描述 投票:0回答:1

我是

Gremlin
的新手,正在努力修改查询以获得适当的结果。 我有一个查询给出了图表的
depth
。查询如下:

g.withSack(0)
  .V('company_1')
  .repeat(
    outE('HAS_SHRHLDING_PC_TO')
    .sack(sum).by(constant(1))
    .inV()
    .simplePath())
    .until(not(outE()))
  .sack()
  .max()
  .aggregate('x')
  .fold()
  .V(company_1)
  .repeat(
    outE('HAS_VOTING_PC_TO')
    .sack(sum).by(constant(1))
    .inV()
    .simplePath())
    .until(not(outE()))
  .sack()
  .max()
  .aggregate('x')
  .cap('x')
  .unfold()
  .max()

输出以数字形式返回。输出如下:

4

我正在尝试修改此查询以获取作为键值对的输出,而不是仅作为值,因为我必须向输出添加多个键和值。

我想检索在输入中传递的

company_number
以及
depth

预期输出示例:

{'company_number': 'company_1', 'depth': 4}

我尝试使用

project
未成功达到预期结果。任何帮助,将不胜感激。谢谢

gremlin tinkerpop amazon-neptune
1个回答
0
投票

这是您可以做到的一种方法:

gremlin> g = TinkerFactory.createModern().traversal()
==>graphtraversalsource[tinkergraph[vertices:6 edges:6], standard]
gremlin> g.withSack(0).V(1).as('start').
......1>   repeat(out().simplePath().sack(sum).by(constant(1))).
......2>     emit(__.not(outE())). 
......3>   dedup(). 
......4>   select('start').
......5>   project('v','depth').
......6>     by().
......7>     by(sack()).
......8>   order().by('depth',desc).
......9>   limit(1)
==>[v:v[1],depth:2]

我避免使用

max()
,这样路径历史就不会丢失,并且我们可以
select('start')
回到起始顶点。到那时,很容易
project()
,然后按“深度”排序以获得最深的。

© www.soinside.com 2019 - 2024. All rights reserved.