azure-cosmosdb - Gremlin 查询到 groupcount 边缘,并返回最大/最近日期以及标识符
问题描述
我有一个简单的图形结构如下:
事件-----HappenedAt----->位置
Event 和 Location 顶点都具有 name 和 id 属性。HappenedAt 边缘有一个名为“on”的日期属性(以刻度为单位)。
我在编写查询时遇到问题,该查询对于给定位置(因此从已知位置开始)返回在该位置发生的所有不同事件的列表,每个事件发生的次数的计数(因此发生的组数边缘) 以及每个事件发生的最大/最近日期。
理想情况下,给定位置的输出如下所示:事件 ID、计数、最近/最大日期
事件 A,2,2018 年 5 月 27 日
事件 B,2,2018 年 7 月 1 日
我可以自己获得组数和最大日期,但似乎无法正确获取查询,将它们组合成单个查询以产生该输出。
可能很简单,但总的来说,我对 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]
我group()
在第 2-3 行的边缘获取唯一事件,所以基本上在第 3 行的末尾我们有一个Map
,其中键是事件名称,值是该事件的“happenedAt”边缘列表。这是计算所需的原始数据。
在第 4 行,我将映射展开到该映射的条目,并将project()
每个条目展开到您请求的数据结构的新映射中。请注意,在第 7-8 行中,我List
从select(values)
. 这就是我们使用local
in的原因,count(local)
因为我们想计算 in 中的项目List
而不是List
本身。同样,我们unfold()
在List
第 8 行从边缘本身弹出“on”属性值以找到max()
.
推荐阅读
- kendo-ui - 可以为 Kendo 网格中的 columns.filterable.multi 设置自定义文本吗
- javascript - 设置输入字段的值,基于点击一组href链接
- kubernetes - 无法将新节点加入现有集群:[发现] 请求集群信息失败,将重试:[未授权]
- mongodb - Mongorestore 花时间恢复收藏
- javascript - RxJs combineLatest 似乎模拟了一个额外的更新
- apache-camel - 没有反馈的骆驼文件消费者错误
- python - Jupyter Notebook 在执行期间更改变量
- c - Strtok 为字符串的最后一个标记返回 NULL
- angular - 如何在 Angular 6 中增加 http 请求的超时时间?
- docker - gitlab docker login 失败:证书由未知机构签名