Gremlin查询以获取节点

时间:2017-11-22 15:00:14

标签: gremlin

使用案例:获取节点的所有边缘,按标签分组,并按照标签,显示名称和两者的计数对另一个V进行分组。

Graph具有以下节点:post,product,company post有一个名为评论的产品和公司。

对于postid,有没有办法按产品和公司分组评论。

我想在表格中显示以下信息。

postid |审查(统计)|产品(数量) postid |审查(统计)|公司(数)

我尝试使用outE()标签out()groupby,但我似乎无法构建一个查询,该计数将为我提供多个groupby的计数。

非常感谢任何帮助 提前谢谢。

graph = TinkerGraph.open()
g = graph.traversal()
v1 = graph.addVertex(id, 1, label, "post")
v2 = graph.addVertex(id, 2, label, "company")
v3 = graph.addVertex(id, 3, label, "company")
v4 = graph.addVertex(id, 4, label, "product")
v5 = graph.addVertex(id, 5, label, "product")
v1.addEdge("reviews", v2)
v1.addEdge("reviews", v3)
v1.addEdge("reviews", v4)
v1.addEdge("reviews", v5)

http://gremlinbin.com/bin/view/5a161abddfb52

Image

1 个答案:

答案 0 :(得分:1)

我没有你在输出中要求的确切结构,但是这可能足够接近你的目的,因为它确实返回了我认为你要求的数据:

gremlin> g.V().hasLabel('post').
......1>   project('postid','reviews','types').
......2>     by(id).
......3>     by(outE().count()).
......4>     by(out().groupCount().by(label))
==>[postid:1,reviews:4,types:[product:2,company:2]]

另一种选择:

gremlin> g.V().hasLabel('post').
......1>   outE().as('e').
......2>   inV().as('i').
......3>   select('e','i').by(label).
......4>   groupCount().by(select('e','i'))
==>[[e:rates,i:company]:2,[e:reviews,i:company]:2,[e:reviews,i:product]:2,[e:rates,i:product]:2]