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

Gremlin 3-获取所有传入和传出顶点,包括它们的边和方向,包括没有边的顶点

陶胤运
2023-03-14

我试图组合一个查询来获取所有传入和传出的顶点,包括它们的边和方向,但这也会返回那些没有边的顶点。

我现在可以通过强制所有东西都至少有一个边缘来解决这个问题,但这是我想要避免的。

也许值得注意的是,我使用Azure CosmosDB的图形API:https://docs.microsoft.com/en-us/azure/cosmos-db/gremlin-support

这是我用来返回所有顶点及其边和相关顶点的查询:

g.V().hasLabel('User').as('User').bothE().as('Edge').otherV().as('RelatedObject').path()

我从中得到这个:小精灵获取所有传入和传出顶点,包括它们的边和方向

此查询生成的结果稍后我可以在C#应用程序中轻松解析,但是此查询不会返回没有边的顶点。

有什么想法吗?

编辑

我最接近的是:

g.V().hasLabel("User").as("User").map(bothE().otherV().fold()).as("RelatedObjects").select("User", "RelatedObjects")

然而,这种方法不会显示用户和相关对象之间的边缘。我还需要边来正确地将这些相关对象映射到父对象。

共有3个答案

祖浩淼
2023-03-14

试试这个

g、 V().hasLabel(“User”).as(“User”).bothE().as(“edges”).map(选择(“edges”).inV().fold()).as(“RelatedObjects”)。选择(“用户”、“相关对象”、“边缘”)

尚景焕
2023-03-14

我没有你的图形来测试,但我认为这个一般模式应该适合你。

g.withSideEffect('x', [] as Set).                        
     V().hasLabel("user").store('x').                                    
     bothE().store('x').                                  
     otherV().store('x').                                 
     cap('x')

编辑为不使用集合

g.withSideEffect('x', []).                        
     V().has('code',"AUS").store('x').                                    
     bothE().store('x').                                  
     otherV().store('x').                                 
     cap('x').unfold().dedup().fold() 
谢财
2023-03-14

我认为您可以删除所有步骤标签并使用副作用-只需使用project()

gremlin> g.V().hasLabel('person').
......1>   project('user','edges','relatedVertices').
......2>     by().
......3>     by(bothE().fold()).
......4>     by(both().fold())
==>[user:v[1],edges:[e[9][1-created->3],e[7][1-knows->2],e[8][1-knows->4]],relatedVertices:[v[3],v[2],v[4]]]
==>[user:v[2],edges:[e[7][1-knows->2]],relatedVertices:[v[1]]]
==>[user:v[4],edges:[e[10][4-created->5],e[11][4-created->3],e[8][1-knows->4]],relatedVertices:[v[5],v[3],v[1]]]
==>[user:v[6],edges:[e[12][6-created->3]],relatedVertices:[v[3]]]
 类似资料:
  • 所以我正在研究这个问题: 这是我目前所掌握的 首先,我想对我的答案再作核实。我对有向图不是那么熟悉,对算法的效率/复杂度也不是特别熟练。我想我做得对,但如果我需要的话,我想要一些帮助。我也在寻找任何想法,使它更有效率。这些是我脑海中最先出现的算法,所以我觉得可能有更好的方法来实现它。 谢谢

  • 本文向大家介绍图的边和顶点,包括了图的边和顶点的使用技巧和注意事项,需要的朋友参考一下 图是一组称为节点或顶点的点,它们由一组称为edge的线互连。图形或图形理论的研究是数学,工程学和计算机科学领域中许多学科的重要组成部分。 图论 定义-图形(表示为G =(V,E))由一组非空的顶点或节点V和一组边缘E组成。顶点a 表示边缘的端点。一条边连接两个顶点a,b ,并由其连接的一组顶点表示。 示例-让我

  • GraphX暴露保存在图中的顶点和边的RDD。然而,因为GraphX包含的顶点和边拥有优化的数据结构,这些数据结构提供了额外的功能。顶点和边分别返回VertexRDD和EdgeRDD。这一章 我们将学习它们的一些有用的功能。 VertexRDDs VertexRDD[A]继承自RDD[(VertexID, A)]并且添加了额外的限制,那就是每个VertexID只能出现一次。此外,VertexRDD

  • 一个简单的背景:我正在构建一个语义图,使用带有邻接表的BGL有向图: 我需要做的事情之一,是处理一个较小的图(子图)到我的主图。 暗示我的lambda捕获参数应该是一对(我猜是一个实际的边?)。 所以,我的问题是:我怎样才能发现在顶点的外边中是否存在类似的边呢?

  • 我有父顶点(P)连接到子顶点(C1,C2,C3,..Cn)(通过输出边标签“DEP”),其中Cn可能非常大。这些子顶点(C1、C2、..)可以或可以不通过输出边标签“FRNDS”连接到其他顶点。在Gremlin中是否有一种方法可以找出(P)的所有子顶点,这些子顶点没有任何带有标签“frnds”的外出边? 问候你,库马尔

  • 即将用Maven TestNG Selenium实现一个测试框架。 如何声明告诉TestNG运行所有测试的suite.xml?我尝试了所有这些都无济于事: 我需要用不同的参数指定不同的套件配置,但都运行所有测试。我能找到的每一个例子都清楚地列出了对我来说意义不到零的每个类或包。