Gremlin 查询以查找所有节点的标签计数
Gremlin query to find the count of a label for all the nodes
示例查询
下面的查询returns me count of a label say
"Asset " 对于特定的 id (0) 有 >>>
g.V().hasId(0).repeat(out()).emit().hasLabel('Asset').count()
但我需要找到图表中存在的 所有节点 的计数,条件如上。
我可以单独完成,但我的要求是获取所有具有该标签的节点的计数 'Asset'。
所以我期待
{ v[0]:2
{v[1]:1}
{v[2]:1}
}
其中 v[1] 和 v[2] 下面有一个节点,标签分别为 "Asset",使得总计数 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
会更好。
示例查询
下面的查询returns me count of a label say
"Asset " 对于特定的 id (0) 有 >>>
g.V().hasId(0).repeat(out()).emit().hasLabel('Asset').count()
但我需要找到图表中存在的 所有节点 的计数,条件如上。
我可以单独完成,但我的要求是获取所有具有该标签的节点的计数 'Asset'。
所以我期待
{ v[0]:2
{v[1]:1}
{v[2]:1}
}
其中 v[1] 和 v[2] 下面有一个节点,标签分别为 "Asset",使得总计数 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
会更好。