Gremlin:使用给定的标签和属性值计算出站边缘

Tom*_*per 2 gremlin tinkerpop3

我有一个图表,其中顶点有几个出站边类型,并且每个边类型都有属性。我想从每个顶点获取出站边的计数,但将计数限制为具有特定标签和属性值的边。

到目前为止,我有:

g.V().hasLabel("vertexLabel").as("source")
    .outE("edgeLabel").has("edgeProp", "propValue").as("edge")
    .select("source", "edge")
Run Code Online (Sandbox Code Playgroud)

这给了我一个包含正确标签和属性的每个源顶点和每个输出边的列表。我想要做的是将其减少为每个源顶点的单个条目和出站边数的计数。但是,我似乎无法groupCountoutE. 我得到的最接近的是:

g.V().hasLabel("vertexLabel").as("source").out("edgeLabel").groupCount()
Run Code Online (Sandbox Code Playgroud)

这让我按源顶点计数,但包括带有该标签的所有边,而不管它们具有什么属性值。

我知道这可能需要一个group().by()步骤,但我不确定如何形成它。

提前致谢。

ste*_*tte 5

使用 TinkerPop 的“现代”玩具图,我认为您可以最好地表达这一点project()

gremlin> g.V().hasLabel('person').
......1>   project('source','count').
......2>     by().
......3>     by(outE('created').has('weight',gt(0.5)).count())
==>[source:v[1],count:0]
==>[source:v[2],count:0]
==>[source:v[4],count:1]
==>[source:v[6],count:0]
Run Code Online (Sandbox Code Playgroud)

你也可以这样做,groupCount()但对我来说感觉有点尴尬:

gremlin> g.V().hasLabel('person').
......1>   outE('created').
......2>   has('weight',gt(0.5)).
......3>   groupCount().
......4>     by(inV())
==>[v[5]:1]
Run Code Online (Sandbox Code Playgroud)

请注意,在这种情况下,您会丢失“0”值,因为边缘在groupCount(). 你也可以去,group()但我认为它读起来不如project()

gremlin> g.V().hasLabel('person').
......1>   group().
......2>     by().
......3>     by(outE('created').
......4>        has('weight',gt(0.5)).count())
==>[v[1]:0,v[2]:0,v[4]:1,v[6]:0]
Run Code Online (Sandbox Code Playgroud)