通过所有边找到连接到希望的所有顶点
Find all the Vertexes which are connected to hope through all edges
我想找到所有连接到动作的顶点(边缘标签允许),那些被 CriticalAction1 标记为关键的顶点。
条件是它应该连接所有被CriticalAction1顶点标记为关键动作的动作。
所以在下图中,因为 CriticalAction1 有 2 个动作 Action1 和 Action2。
Node1 连接了总共 3 个动作,包括 Action1 和 Action2。所以应该是输出结果。
Node2 仅与 1 个操作相关联。它不满足它应该与所有被 CriticalAction1 标记为关键的操作相关联的标准。
示例数据脚本:
g.addV('Node1').as('node1'). addV('Node2').as('node2'). addV('Action1').as('action1'). addV('Action2').as('action2'). addV('Action3').as('action3'). addV('CriticalAction1').as('criticalaction1'). addE('allow').from('node1').to('action1'). addE('allow').from('node1').to('action2'). addE('allow').from('node1').to('action3'). addE('allow').from('node2').to('action1'). addE('critical action').from('criticalaction1').to('action1'). addE('critical action').from('criticalaction1').to('action2').iterate()
您可以使用aggregate
存储所有关键动作连接,然后groupCount
你从他们那里找到的节点。
g.V().hasLabel('CriticalAction1').
out('critical action').
aggregate('actions').in('allow').
groupCount().by().unfold().
where(eq('actions')).
by(select(values)).
by(count(local)).
select(keys)
示例:https://gremlify.com/wn9cge4knrh
编辑:
对于多个 CriticalAction:
g.V().hasLabel('CriticalAction').project('CriticalAction', 'Nodes')
.by(valueMap())
.by(
out('has critical action').fold()
aggregate('actions').unfold().in('allow').
groupCount().by().unfold().
where(eq('actions')).
by(select(values)).
by(unfold().tail(1).count(local))
.select(keys).valueMap().fold())
我想找到所有连接到动作的顶点(边缘标签允许),那些被 CriticalAction1 标记为关键的顶点。
条件是它应该连接所有被CriticalAction1顶点标记为关键动作的动作。
所以在下图中,因为 CriticalAction1 有 2 个动作 Action1 和 Action2。 Node1 连接了总共 3 个动作,包括 Action1 和 Action2。所以应该是输出结果。 Node2 仅与 1 个操作相关联。它不满足它应该与所有被 CriticalAction1 标记为关键的操作相关联的标准。
示例数据脚本:
g.addV('Node1').as('node1'). addV('Node2').as('node2'). addV('Action1').as('action1'). addV('Action2').as('action2'). addV('Action3').as('action3'). addV('CriticalAction1').as('criticalaction1'). addE('allow').from('node1').to('action1'). addE('allow').from('node1').to('action2'). addE('allow').from('node1').to('action3'). addE('allow').from('node2').to('action1'). addE('critical action').from('criticalaction1').to('action1'). addE('critical action').from('criticalaction1').to('action2').iterate()
您可以使用aggregate
存储所有关键动作连接,然后groupCount
你从他们那里找到的节点。
g.V().hasLabel('CriticalAction1').
out('critical action').
aggregate('actions').in('allow').
groupCount().by().unfold().
where(eq('actions')).
by(select(values)).
by(count(local)).
select(keys)
示例:https://gremlify.com/wn9cge4knrh
编辑:
对于多个 CriticalAction:
g.V().hasLabel('CriticalAction').project('CriticalAction', 'Nodes')
.by(valueMap())
.by(
out('has critical action').fold()
aggregate('actions').unfold().in('allow').
groupCount().by().unfold().
where(eq('actions')).
by(select(values)).
by(unfold().tail(1).count(local))
.select(keys).valueMap().fold())