Gremlin:计算具有给定标签和 属性 值的出站边缘
Gremlin: Count outbound edges with a given label and property value
我有一个图,其中顶点有多个出站边类型,并且每个边类型都有属性。我想从每个顶点获取出站边缘的计数,但将计数限制为具有特定标签和 属性 值的边缘。
到目前为止我有:
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()
步骤,但我不确定如何形成它。
提前致谢。
使用 TinkerPop 的 "modern" 玩具图,我认为您可以使用 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]
我有一个图,其中顶点有多个出站边类型,并且每个边类型都有属性。我想从每个顶点获取出站边缘的计数,但将计数限制为具有特定标签和 属性 值的边缘。
到目前为止我有:
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()
步骤,但我不确定如何形成它。
提前致谢。
使用 TinkerPop 的 "modern" 玩具图,我认为您可以使用 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]