我是
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> 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()
,然后按“深度”排序以获得最深的。