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

Gremlin在升序中按属性排序边缘,并根据边缘在有序边缘列表中的位置在边缘上标记属性

景成和
2023-03-14

我有一个“用户”顶点,其中有几个用户。我有一个“邀请”顶点,它基本上讲述了一个用户发送给另一个用户的邀请。我有一个“sentTo”边,将邀请顶点与用户顶点(邀请的接收者)连接起来。我有一个“sentBy”边,将邀请顶点连接到用户顶点(发送邀请的用户)。sentBy edge有一个“on”属性,它是一个日期对象。sentBy edge还具有“inviterCount”属性,基本上是收件人用户(接收邀请的用户)的邀请计数(在创建sentBy edge时)。由于某些原因,我正确设置了“on”属性,但没有设置inviterCount。为了在sentBy边缘上设置inviterCount,我需要首先对发送给该用户的邀请进行排序。我能够按“on”日期以升序排列sentBy边缘,这是一个相当简单的小精灵查询。我正在努力更新inviterCount属性,该属性基本上是该用户在邀请列表中的位置。对于给定的邀请接收者,如何知道边在边列表中的位置,以及如何在查询中设置该边的属性(inviterCount)?

g.addV('User').property('userId',1).property('name','Sam').as('u1')
.addV('User').property('userId',2).property('name','Ram').as('u2')
.addV('User').property('userId',3).property('name','Cam').as('u3')
.addV('User').property('userId',4).property('name','Nam').as('u4')
.addV('Invitation').property('invitationId',1).as('i1')
.addE('sentBy').property('on',new Date(1621047481204)).to('u1')
.select('i1').addE('sentTo').to('u4')
.addV('Invitation').property('invitationId',2).as('i2')
.addE('sentBy').property('on',new Date(1621047612262)).to('u2')
.select('i2').addE('sentTo').to('u4')
.addV('Invitation').property('invitationId',3).as('i3')
.addE('sentBy').property('on',new Date(1621047644430)).to('u3')
.select('i3').addE('sentTo').to('u4') 

g、 V().hasLabel('User')。has('name','Nam')。inE('sentTo')。outV().outE('sentBy')。order()。by('on')

如前所述,sentBy边缘有另一个名为inviterCount的属性,需要设置。

编辑我读过麻袋,但它们对我需要做的事情没有帮助。对于每次遍历,sack变量被重置,该sack上的任何操作都将在该遍历中执行。我需要的是一个跨遍历的计数器。简单地说,我需要一个迭代计数器。我需要在基本for循环中使用“I”。

共有1个答案

戚奇略
2023-03-14

索引步骤可用于模拟i is索引要求,如下所示。如果需要对这些值进行处理,则可以使用尾部步骤来获取每条边的索引。

gremlin> g.V().hasLabel('User').
......1>       has('name','Nam').
......2>       inE('sentTo').
......3>       outV().
......4>       outE('sentBy').
......5>       order().
......6>         by('on').
......7>       fold().
......8>       index().
......9>       unfold()  

==>[e[60896][60894-sentBy->60882],0]
==>[e[60900][60898-sentBy->60885],1]
==>[e[60904][60902-sentBy->60888],2]  

可以扩展查询以在使用索引的边上创建属性。

gremlin> g.V().hasLabel('User').
......1>       has('name','Nam').
......2>       inE('sentTo').
......3>       outV().
......4>       outE('sentBy').
......5>       order().
......6>         by('on').
......7>       fold().
......8>       index().
......9>       unfold().as('edges').
.....10>       limit(local,1).
.....11>       property('i',select('edges').tail(local,1))   

==>e[60944][60942-sentBy->60930]
==>e[60948][60946-sentBy->60933]
==>e[60952][60950-sentBy->60936]

gremlin> g.E(60944,60948,60952).valueMap()
==>[i:0,on:Fri May 14 21:58:01 CDT 2021]
==>[i:1,on:Fri May 14 22:00:12 CDT 2021]
==>[i:2,on:Fri May 14 22:00:44 CDT 2021]  
 类似资料:
  • TBD 参考 The Birth of an Edge Orchestrator – Cloudify Meets Edge Computing K8s(Kubernetes) and SDN for Multi-access Edge Computing deployment

  • 前言 为了配置kubernetes中的traefik ingress的高可用,对于kubernetes集群以外只暴露一个访问入口,需要使用keepalived排除单点问题。本文参考了kube-keepalived-vip,但并没有使用容器方式安装,而是直接在node节点上安装。 定义 首先解释下什么叫边缘节点(Edge Node),所谓的边缘节点即集群内部用来向集群外暴露服务能力的节点,集群外部的

  • 本文向大家介绍neo4j 创建边缘,包括了neo4j 创建边缘的使用技巧和注意事项,需要的朋友参考一下 示例            

  • 我正在azure中使用cosmos图形数据库。 有人知道是否有一种方法可以在两个顶点之间添加一条边,只有当它不存在时(使用gremlin图查询)? 我可以在添加顶点时这样做,但不能使用边。我从这里获取了执行此操作的代码: 谢谢

  • 我正在尝试在Microsoft Edge浏览器上执行自动测试用例。在执行测试用例时,Edge启动,页面加载,但它无法执行javaScript(使用IJavaScriptExecutor)并引发以下异常: 但是,我发现了执行JavaScript的解决方法。每当您在边缘浏览器中打开 url(通过自动化脚本)时,只需打开其开发人员工具(按 F12 键)。然后它将开始在边缘浏览器上执行JavaScript