我有以下情况:
我正在尝试生成类似以下结果集的内容:
[
{
node: A,
tags: [T1.title, T2.title]
},
{
node: B,
tags: [T2.title]
}
]
但我能做的最好的事情就是产生了大量冗余数据:
[
{ node:A, tag: T1.title },
{ node:A, tag: T2.title },
{ node:B, tag: T2.title }
]
有这样的事情:
g.V()
.has('label','stuff').as('n')
.outE('tagged').inV().values('title').as('x')
.select('n', 'x')
我在repeat
或cap
或fold
可以帮助我之间迷失
答案 0 :(得分:1)
在询问Gremlin问题时,将样本数据提供为可以复制/粘贴到控制台会话中的Gremlin语句总是有帮助的:
g.addV('stuff').property('name','a').as('a').
addV('stuff').property('name','b').as('b').
addV('tag').property('title','t1').as('t1').
addV('tag').property('title','t2').as('t2').
addE('tagged').from('a').to('t1').
addE('tagged').from('a').to('t2').
addE('tagged').from('b').to('t2').iterate()
您可以使用group()
获取基于Map
的格式:
gremlin> g.V().hasLabel('stuff').
......1> group().
......2> by('name').
......3> by(out('tagged').values('title').fold())
==>[a:[t1,t2],b:[t2]]