获取节点的边和其他节点数的Gremlin查询计数

4

用例:按标签将节点的所有边分组,同时按标签、显示名称以及两者计数来分组其他节点,

图形具有以下节点:post、product、company。 post具有名为review的outE,该边指向product和company。

对于一个postid,是否有一种方法可以获取按product和company分组的评论计数。

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

postid | review(计数)| product(计数) postid | review(计数)| company(计数)

我尝试过使用带有标签groupby的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)

Image


也许你可以修改你的答案,包括使用 Gremlin 脚本创建一个示例图表,就像这个答案中所示:https://dev59.com/5Kbja4cB1Zd3GeqPfFoN#47042021 - 这可能会使得理解更加容易。 - stephen mallette
是的,抱歉。已添加到主帖中。 - Suezieq
1个回答

5

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

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]

太棒了,Stephen!非常感谢你!祝节日快乐。 - Suezieq
抱歉,我之前说得太早了。我尝试了那个查询,它似乎只计算边缘的总数和出节点的总数,而不是按每个边缘标签进行分组。例如,这篇文章有4篇评论,其中2篇针对公司,2篇针对产品。此外,这篇文章还有4个评级,其中2个针对公司,2个针对产品。理想情况下,查询结果应该是post|reviews:2|company:2,post|reviews:2|product:2,post|rates:2|company:2,post|rates:2|company:2。这种查询是否可能实现? - Suezieq
这里有一张图片,我想要展示它:https://pasteboard.co/GVaZwIJ.png。这些数字代表该边的节点组数量。 - Suezieq
我刚刚对我的答案进行的编辑是否让你更接近你想要的结果?“按边缘分组,其他V”是我试图在那里呈现的。 - stephen mallette
我问这个问题是因为我四处搜寻,但没有找到一个能够准确表达意图的答案。 - Suezieq
显示剩余6条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接