我有一个图表,其中顶点有几个出站边类型,每个边类型都有属性。我想得到每个顶点的出站边数,但是将计数限制为具有特定标签和属性值的边。
到目前为止,我有:
g.V().hasLabel("vertexLabel").as("source")
.outE("edgeLabel").has("edgeProp", "propValue").as("edge")
.select("source", "edge")
这为我提供了每个源椎骨和每个外出边缘的列表,其中包含正确的标签和属性。我想要做的是将每个源顶点的一个条目减少到一个条目,并将出站边数的数量减少。但是,我似乎无法让groupCount
与outE
结合使用。我最接近的是:
g.V().hasLabel("vertexLabel").as("source").out("edgeLabel").groupCount()
这使我按源顶点计数,但包括具有该标签的所有边,而不管它们具有哪些属性值。
我知道这可能需要group().by()
步骤,但我不确定如何形成它。
提前致谢。
答案 0 :(得分:3)
使用"现代"来自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]
您也可以使用groupCount()
执行此操作,但对我来说感觉有点尴尬:
gremlin> g.V().hasLabel('person').
......1> outE('created').
......2> has('weight',gt(0.5)).
......3> groupCount().
......4> by(inV())
==>[v[5]:1]
注意你输了" 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]