首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用派生值过滤gremlin遍历

使用派生值过滤gremlin遍历
EN

Stack Overflow用户
提问于 2021-05-24 19:24:11
回答 1查看 65关注 0票数 0

早上好!

我有下面的数据模型,在这个模型中,操作可以通过连接的边缘来唯一地识别,它的标签与一个旅程ID相匹配。

数据模型

我想要实现的是,我可以把每一次独特的旅程组合在一起,并对它们进行统计。例如,在上面的数据中,如果杰里米早上醒来吃鸡蛋,晚上吃吐司,我想看看:

杰里米/莫恩->饮食->鸡蛋->旅程结束,数:1

杰里米/夏娃->饮食->祝酒->旅程结束,数:1

相反,我(可以理解)得到:

杰里米/莫恩->饮食->鸡蛋->旅程结束

杰里米/夏娃->饮食->祝酒->旅程结束

杰里米/莫恩->饮食->烤面包->旅程结束

杰里米/夏娃->饮食->鸡蛋->旅程结束

我尝试过使用重复进行过滤,并使用如下语句:

代码语言:javascript
复制
g.V().hasLabel('UserJourney').as('root').
out('firstStep').repeat(
    outE().filter(
        label().is(select('root').by(id())))).
until(hasLabel('JourneyEnd')).path()

但是(我认为)由于遍历的工作方式,它是不可行的,因为在我回去阅读它的时候,根步骤包含了所有的旅程。

任何关于如何获得我正在寻找的输出的建议都是非常受欢迎的。安装脚本如下:

代码语言:javascript
复制
g.addV('UserJourney').property(id, 'Jeremy/Morn').
  addV('UserJourney').property(id, 'Jeremy/Eve').
  addV('JourneyStep').property(id, 'I Need').
  addV('JourneyStep').property(id, 'Eats').
  addV('JourneyStep').property(id, 'Eggs').
  addV('JourneyStep').property(id, 'Toast').
  addV('JourneyEnd').property(id, 'JourneyEnd').
  
  addE('Jeremy/Morn').from(V('Eats')).to(V('Eggs')).
  addE('Jeremy/Morn').from(V('Eggs')).to(V('JourneyEnd')).
  addE('firstStep').from(V('Jeremy/Morn')).to(V('Eats')).

  addE('Jeremy/Eve').from(V('Eats')).to(V('Toast')).
  addE('Jeremy/Eve').from(V('Toast')).to(V('JourneyEnd')).
  addE('firstStep').from(V('Jeremy/Eve')).to(V('Eats')).
  iterate()
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-05-25 18:01:23

您可以使用pathfromwhere...by步骤来实现所需的功能。

代码语言:javascript
复制
gremlin>  g.V().hasLabel('UserJourney').as('a').out().
......1>        repeat(outE().where(eq('a')).by(label).by(id).inV()).
......2>        until(hasLabel('JourneyEnd')).
......3>        path().
......4>          from('a')   

==>[v[Jeremy/Morn],v[Eats],e[3][Eats-Jeremy/Morn->Eggs],v[Eggs],e[4][Eggs-Jeremy/Morn->JourneyEnd],v[JourneyEnd
]]
==>[v[Jeremy/Eve],v[Eats],e[6][Eats-Jeremy/Eve->Toast],v[Toast],e[7][Toast-Jeremy/Eve->JourneyEnd],v[JourneyEnd
]]    

若要从结果中删除边缘,可以使用flatMap

代码语言:javascript
复制
gremlin>  g.V().hasLabel('UserJourney').as('a').out().
......1>        repeat(flatMap(outE().where(eq('a')).by(label).by(id).inV())).
......2>        until(hasLabel('JourneyEnd')).
......3>        path().
......4>          from('a')  

==>[v[Jeremy/Morn],v[Eats],v[Eggs],v[JourneyEnd]]
==>[v[Jeremy/Eve],v[Eats],v[Toast],v[JourneyEnd]]   
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67677855

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档