gremlin / tinkerpop - 有效的树状遍历结果,以限制冗余

时间:2018-01-05 16:17:44

标签: azure-cosmosdb gremlin tinkerpop

我有以下情况:

graph scenario

我正在尝试生成类似以下结果集的内容:

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

我在repeatcapfold可以帮助我之间迷失

1 个答案:

答案 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]]