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

以编程方式遍历多个顶点时,使用顶点属性值创建边

洪国兴
2023-03-14

我发现,当从DB或任何格式将数据导入到图中时,我需要使用这些键创建边,这些键已经是顶点中的属性。

我如何通过使用这些我已经摄入到图中的FK遍历所有顶点来创建边?

我需要这是可编程的,因为我有很多需要这一步的数据。目前我正在使用Gremlin。Net,因为我使用的大部分代码已经是C#

示例:假设我吞下了一些客户

g.add客户,c_id,product_id

和一些产品

g、 addV(“产品”)。属性(“id”,产品id)

我想创建像这样的边缘:客户[购买-

我想做以下事情:

g、 V.hasLabel(“客户”)。作为(“c”)。将(“购买的”)添加到(g.V(c.product))

显然我不能做c。如果有任何使用循环的解决方案,很遗憾,这是不可能的,因为宇宙图不支持它。

到目前为止,我一直在使用C语言中的循环,但即使是我的样本数据也不可扩展。

共有1个答案

关正雅
2023-03-14

也许有更好的方法可以做到这一点,但我会提供:

gremlin> g = TinkerGraph.open().traversal()
==>graphtraversalsource[tinkergraph[vertices:0 edges:0], standard]
gremlin> g.addV('customer').property('id', 321).property('productBought', 123)
==>v[0]
gremlin> g.addV('product').property('id', 123)
==>v[3]
gremlin> g.addV('customer').property('id', 987).property('productBought', 789)
==>v[5]
gremlin> g.addV('product').property('id', 789)
==>v[8]
gremlin> g.V().hasLabel('customer').as('c').
......1>   V().hasLabel('product').as('p').
......2>   where('p', eq('c')).
......3>     by('id').
......4>     by('productBought').
......5>   select('p').
......6>   addE('buys').from('c').to('p')
==>e[10][0-buys->3]
==>e[11][5-buys->8]

上述概念在某种程度上是基于“遍历诱导值”,本文对此进行了更详细的描述。

我最近看到很多问题都在问这类问题——人们想在哪里进行无边连接(即顶点属性值上的连接)。这不是一个图形查询大放异彩的地方,对于大多数Gremlin的实现,可能还有CosmosDB,这将是一个昂贵的操作,取决于您拥有多少数据。

当关系的知识已知时,最好生成边。因此,如果您在某一点上知道“ProductBuild”存在,那么它不应该作为“ProductBuild”属性键加载,而是作为“product”顶点的边加载。在您的模式设计中预先做出这些选择将在以后节省很多困难。

 类似资料:
  • OrientDB数据库不仅是一个文档数据库,也是一个图形数据库。 和等新概念用于以图形的形式存储数据。 它在顶点上应用多态性。 的基类是. 在本章中,您将学习如何创建顶点来存储图形数据。 以下语句是创建顶点()命令的基本语法。 以下是有关上述语法中选项的详细信息。 - 定义顶点所属的类。 - 定义存储顶点的集群。 - 定义要设置的字段。 - 定义为字段设置的表达式。 示例 尝试下面的示例来了解如何

  • 我有以下图表 如果我写一个查询g.V('a')。Out(),我如何才能得到被遍历的边和在traveral中遇到的顶点的值?

  • 我正在使用salesforce的沙盒开发人员版本。在安装程序中,当我在快速查找框中搜索“Apex Class”时,未找到任何结果。还有文件--

  • 通过几何体BufferGeometry的顶点索引属性BufferGeometry.index可以设置几何体顶点索引数据,如果你有WebGL基础很容易理解顶点索引的概念,如果没有也没有关系,下面会通过一个简单的例子形象说明。 比如绘制一个矩形网格模型,至少需要两个三角形拼接而成,两个三角形,每个三角形有三个顶点,也就是说需要定义6个顶点位置数据。对于矩形网格模型而言,两个三角形有两个顶点位置是重合的

  • 下面的堆栈溢出问题 我尝试了在语句中使用两个重复的多个构造,但无法为每个起始顶点获得独立的。我也在使用平台,因此它限制了Gremlin的使用,其中不允许使用循环/脚本。所有gremlin查询必须以并由与链接在一起的命令组成 https://docs.aws.amazon.com/neptune/latest/userguide/access-graph-gremlin-differences.ht

  • 我正在创建一个Titan图(由Dynamodb支持);我正在使用Titan 1.0.0并运行Gremlin Server 3(在TinkerPop3上)。 我试图在一条直线上用一个标签和多个属性向图中添加一个顶点。我可以用一个标签和一个属性添加一个顶点,在创建一个顶点后,我可以向其添加多个属性,但似乎我不能一次完成所有操作。 为了测试,我在gremlin shell中运行命令,但最终用例是通过RE