Gremlin查询以找到所有节点的标签计数



示例查询
以下查询返回了我的标签的计数特定ID(0(的"资产">>>
g.v((。hasid(0(.repeat(out(out(((。emit((。haslabel('Asset'(。count((

,但我需要找到的计数,所有节点都存在,如上所述。

我能够单独这样做,但我的要求是获得所有带有标签的节点"资产"的节点。

所以我期待

之类的东西

{  v [0]:2
       {v [1]:1}       {V [2]:1}
}
其中v [1]和v [2]分别带有标签上的节点为"资产",使整体计数v [0] = 2。

有几种方法可以做到。也许有点奇怪,但是您可以使用group()

g.V().
  group().
    by().
    by(repeat(out()).emit().hasLabel('Asset').count())

或者您可以使用select()进行操作,然后您不会在内存中构建大Map

g.V().as('v').
  map(repeat(out()).emit().hasLabel('Asset').count()).as('count').
  select('v','count')

如果要维护层次结构,则可以使用tree()

g.V(0).
  repeat(out()).emit().
  tree().
    by(project('v','count').
         by().
         by(repeat(out()).emit().hasLabel('Asset')).select(values))

基本上,您可以从顶点0获得一棵树,然后对其施加一个project(),以在树上每个顶点构建该结构。我使用union有不同的方法来做到这一点,但是我发现了一个可能的错误,并且不得不提出一种不同的方法(实际上Gremlin Guru,Daniel Kuppitz,提出了上述方法(。我认为project的使用更自然和可读,因此绝对是更好的方法。当然,正如Kuppitz先生所指出的那样,使用project,您可以创建一个不必要的Map(您只需使用select(values)(。从这个意义上讲,union的使用会更好。

最新更新