Azure cosmosdb Gremlin查询groupcount Edge,并返回最大/最近日期以及标识符

Azure cosmosdb Gremlin查询groupcount Edge,并返回最大/最近日期以及标识符,azure-cosmosdb,gremlin,Azure Cosmosdb,Gremlin,我有一个简单的图形结构,如下所示: 事件------发生日期------->地点 事件和位置顶点都具有名称和id属性。HappenedAt edge有一个名为“on”的日期属性(以记号为单位) 我在编写一个查询时遇到问题,该查询针对给定位置(从已知位置开始)返回在该位置发生的所有不同事件的列表、每个事件发生的次数计数(因此happenedAt边的groupcount)以及每个事件发生的最长/最近日期 理想情况下,给定位置的输出如下所示: 事件Id、计数、最近/最长日期 事件A,2,5/27/20

我有一个简单的图形结构,如下所示:

事件------发生日期------->地点

事件和位置顶点都具有名称和id属性。HappenedAt edge有一个名为“on”的日期属性(以记号为单位)

我在编写一个查询时遇到问题,该查询针对给定位置(从已知位置开始)返回在该位置发生的所有不同事件的列表、每个事件发生的次数计数(因此happenedAt边的groupcount)以及每个事件发生的最长/最近日期

理想情况下,给定位置的输出如下所示: 事件Id、计数、最近/最长日期

事件A,2,5/27/2018

事件B,2018年1月2日和7日

我可以单独获得组计数和最大日期,但似乎无法正确地将查询组合到单个查询中以生成该输出

可能很简单,但我一般不熟悉Gremlin和Graph数据库。任何帮助都将不胜感激

g.addV('event').property('id','e1').property('name','Event A').as('e1').
  addV('event').property('id','e2').property('name','Event B').as('e2').
  addV('location').property('id','l1').property('name','Location 1').as('l1').
  addV('location').property('id','l2').property('name','Location 2').as('l2').
  addE('happenedAt').from('e1').to('l1').property('on','5/27/2018').
  addE('happenedAt').from('e1').to('l1').property('on','4/1/2018').
  addE('happenedAt').from('e2').to('l1').property('on','6/5/2018').
  addE('happenedAt').from('e2').to('l1').property('on', '7/1/2018').iterate()

我首先想到的是——可能还有其他解决方案:

gremlin> g.V().has('id','l1').
......1>   inE('happenedAt').
......2>   group().
......3>     by(outV().values('name')).
......4>   unfold().
......5>   project('event','count','mostRecent').
......6>     by(select(keys)).
......7>     by(select(values).count(local)).
......8>     by(select(values).unfold().values('on').max())
==>[event:Event B,count:2,mostRecent:7/1/2018]
==>[event:Event A,count:2,mostRecent:5/27/2018]
I
group()
在第2-3行的边上获取唯一事件,因此在第3行的末尾,我们有一个
映射,其中键是事件名称,值是该事件的“happenedAt”边的列表。这是计算所需数据所需的原始数据


在第4行,我将映射展开到该映射的条目,并将每个条目
project()
展开到您请求的数据结构的新映射中。注意,对于第7-8行,我从
选择(值)
中获得了一个边的
列表。这就是为什么我们在
count(local)
中使用
local
,因为我们想要计算
列表中的项目,而不是
列表本身。同样,我们在第8行中使用
unfold()
列表
,从边本身弹出“on”属性值,以查找
max()

当询问有关Gremlin的问题时,如果您提供一个脚本来创建一个示例图,那么对试图回答您的问题的人总是很有帮助的-请参阅此处的示例:更新为包含ScriptUnderstand,非常感谢。我肯定会挣扎很长一段时间,然后我才会独自一人走到这一步。现在我需要真正深入了解折叠/展开和投影,以便将来我可以自己将这样的查询放在一起。再次感谢您的快速回复!