当前位置: 首页 > 知识库问答 >
问题:

Gremlin查询最后一个值的groupcount

彭华皓
2023-03-14

我有一个titan图,有两组顶点,一个用于用户ID,另一个用于产品。用户ID和产品顶点之间的边缘包含购买产品的“日期”。我正在寻找一个小精灵查询,它可以根据上次购买的产品为我提供用户ID的groupcount

例如,如果有如下数据

UserID,Date,Product
A,2016-01-01,'Razor'
A,2016-01-02,'Toothpaste'
B,2016-02-01,'Toothpaste'
B,2016-02-02,'Razor'
C,2016-01-04,'Toothpaste'

我正在寻找如下输出

Product, Count
'Toothpaste',2
'Razor',1

会感谢任何帮助。

共有2个答案

白宏放
2023-03-14

以下查询适用于联机事务处理和OLAP,并且不会触及超过必要的顶点:

g.V().hasLabel("User").
  local(outE("purchased").order().by("date", decr).limit(1)).inV().
  groupCount().by("name")

此外,当您在日期创建以顶点为中心的索引时,Titan可以完美地优化此查询。

孙莫希
2023-03-14

此解决方案适用于您的示例数据:

g、 V().hasLabel('Product')。as('p')。inE('Purchase')。order()。by('Date',decr).outV().dedup().select('p').groupCount().by('Name')

这是算法:

  • 从产品开始
  • 遍历到购买边缘
  • 按日期降序排列边缘
  • 遍历到用户
  • 重复数据消除用户;由于排序,每个用户只保留最近的边缘
  • 跳回产品
  • 按产品名称分组计数

下面是一个Gremlin控制台转储,显示了它的实际情况:

gremlin> graph = TinkerGraph.open()
==>tinkergraph[vertices:0 edges:0]
gremlin> a = graph.addVertex(T.label, 'User', 'UserID', 'A')
==>v[0]
gremlin> b = graph.addVertex(T.label, 'User', 'UserID', 'B')
==>v[2]
gremlin> c = graph.addVertex(T.label, 'User', 'UserID', 'C')
==>v[4]
gremlin> r = graph.addVertex(T.label, 'Product', 'Name', 'Razor')
==>v[6]
gremlin> t = graph.addVertex(T.label, 'Product', 'Name', 'Toothpaste')
==>v[8]
gremlin> a.addEdge('Purchase', r, 'Date', new Date(2016, 0, 1))
==>e[10][0-Purchase->6]
gremlin> a.addEdge('Purchase', t, 'Date', new Date(2016, 0, 2))
==>e[11][0-Purchase->8]
gremlin> b.addEdge('Purchase', t, 'Date', new Date(2016, 1, 1))
==>e[12][2-Purchase->8]
gremlin> b.addEdge('Purchase', r, 'Date', new Date(2016, 1, 2))
==>e[13][2-Purchase->6]
gremlin> c.addEdge('Purchase', t, 'Date', new Date(2016, 0, 4))
==>e[14][4-Purchase->8]
gremlin> g = graph.traversal()
==>graphtraversalsource[tinkergraph[vertices:5 edges:5], standard]
gremlin> g.V().hasLabel('Product').as('p').inE('Purchase').order().by('Date', decr).outV().dedup().select('p').groupCount().by('Name')
==>[Toothpaste:2,Razor:1]
 类似资料:
  • 问题内容: 我知道标题听起来描述性不强,但这是我能想到的最好的: 我有这张桌子 实际上,这是封装在视图中的非常复杂的查询,但现在已不再重要。 我想为每个ID包含最高BDate的行。在此示例中,这将是结果。 我已经尝试过 但随后它返回所有行,因为对于每个值,列均不同。该查询是在Oracle v10中设计的,我有资格仅使用选择查询而不创建过程。 问题答案: 我们可以在IN子句中使用乘法列:

  • 我正在尝试向gremlin顶点添加多个属性。每次我都有不同数量的属性和不同的属性,所以我需要根据Map使查询动态以创建或更新属性。我发现了这个gremlin python-将多个但未知数量的属性添加到顶点,并尝试做同样的事情,但我实例化了一个jansugraph,但我得到了一个错误。任何想法都将非常受欢迎。 下面是直接用gremlin控制台写的,然后我会翻译成java代码。 而我得到的错误是 任何

  • 很抱歉打扰你,但我无法找到一个有效的解决我的问题的方法。我想做一个MongoDB查询,让我得到与SQL查询相同的结果:

  • 我查阅了许多创建索引的文档,但所使用的API是用于Azure cosmos的SQL API,而没有Gremlin API的示例。如有任何帮助,我们将不胜感激。谢谢!!

  • 我正在使用React,使用NodeJS将数据发送到我的PostgreSQL数据库。我的songs表中有一个外键,它引用了albums表中的id。我的问题是,如何将我第一次插入的id返回到第二次插入的相册中?以下是我目前的代码: 我还没有将专辑id添加到我的歌曲插入中。我在等着看如何把唱片id的值输入到我的第二个插页中?

  • 我在创造一个小游戏。所以现在我有了一个只有5行的JTable。 单击按钮后,我希望保存表中的值。我的问题是,最后一个值每次都为null。 例 Val来自表:user1,user2,user3,user4,user5 预期输出:[user1,user2,user3,user4,user5] 输出:[user1,user2,user3,user4,null] 这就是我从表中获取数据的方式 可运行示例