示例查询
以下查询返回了我的标签的计数特定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
的使用会更好。