如何删除两个顶点之间的边并添加新边?

2023-12-02

我正在尝试删除一条边并在两个顶点之间添加一条新边。我该如何在 Tinkerpop3 中做到这一点?

def user = g.V().has("userId", 'iamuser42').has("tenantId", 'testtenant').hasLabel('User'); 
user.outE("is_invited_to_join").where(otherV().has("groupId", 'test123')).drop();
def group = g.V().has("groupId", 'test123').has("tenantId", 'testtenant').hasLabel('Group').next();
user.addEdge("is_member_of", group);

这是我在 gremlin shell 上遇到的错误:

No signature of method: org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.DefaultGraphTraversal.addEdge() is applicable for argument types: (java.lang.String, com.thinkaurelius.titan.graphdb.vertices.CacheVertex) values: [is_member_of, v[8224]]

谢谢。


Gremlin 控制台tutorial稍微讨论一下这个问题。您没有迭代您的遍历。考虑以下:

gremlin> graph = TinkerFactory.createModern()
==>tinkergraph[vertices:6 edges:6]
gremlin> g = graph.traversal()
==>graphtraversalsource[tinkergraph[vertices:6 edges:6], standard]
gremlin> person = g.V().has('name','marko')
==>v[1]

伟大的!此人Vertex存储在“person”变量中......或者是吗?

gremlin> person.class
==>class org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.DefaultGraphTraversal

显然这不是一个Vertex。 “人”是一个Traversal,控制台会这样看待它并为您迭代它,这就是为什么您得到“v1” 在输出中。请注意,遍历现在已“完成”:

gremlin> person.hasNext()
==>false

您需要迭代Traversal进入你的变量 - 在这种情况下,使用next():

gremlin> person = g.V().has('name','marko').next()
==>v[1]
gremlin> person.class
==>class org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerVertex

请注意,您的脚本中将会遇到更多问题,因为您正在使用现在的Vertex as a Traversal,所以这一行:

user.outE("is_invited_to_join").where(otherV().has("groupId", 'test123')).drop();

现在会失败并出现类似的错误,因为Vertex不会有outE()。你需要做类似的事情:

g.V(user).outE("is_invited_to_join").where(otherV().has("groupId", 'test123')).drop();

如果你想在同一次遍历中添加一条边并删除旧的边,你可以这样做:

gremlin> graph = TinkerFactory.createModern()
==>tinkergraph[vertices:6 edges:6]
gremlin> g = graph.traversal()
==>graphtraversalsource[tinkergraph[vertices:6 edges:6], standard]
gremlin> g.V(1).outE('knows')
==>e[7][1-knows->2]
==>e[8][1-knows->4]
gremlin> g.V(1).as('a').outE().as('edge').inV().hasId(2).as('b').addE('knew').from('a').to('b').select('edge').drop()
gremlin> g.V(1).outE('knew')
==>e[12][1-knew->2]
gremlin> g.V(1).outE('knows')
==>e[8][1-knows->4]

可以说,这可能不像将其分成两个或多个单独的遍历那样可读,但它是可以做到的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何删除两个顶点之间的边并添加新边? 的相关文章

  • 对于给定的遍历 gremlin 查询,如何在所有访问过的节点/边上应用静态步骤

    我们将用户权限标记为每个节点和边上的属性 SET 基数 想知道对于给定的遍历 gremlin 查询 在所有访问过的节点 边上应用 has 步骤的最佳方法是什么 就像一个非常简单的遍历查询 从伦敦希思罗机场 LHR 飞往美国机场的航班 g V
  • Gremlin 简单路径查询,根据遇到的第一条边属性获取路径

    示例图 实际图图像 请参见此处 生成顶点的代码 graph addV organization property name CITI property type ORG property T id 1 property orgName CI
  • Spark 集群和 Cassandra 的 Titan 设置和配置

    aurelius 邮件列表以及 stackoverflow 上已经有几个关于配置 Titan 使其与 Spark 一起工作的具体问题的问题 但我认为缺少的是使用 Titan 和 Spark 的简单设置的高级描述 我正在寻找的是使用推荐设置的
  • 在 Titan 中使用 order().by() 时索引不起作用

    泰坦文档说 混合索引支持原生且高效的排序 但是 order by 方法中使用的属性键必须事先添加到混合索引中 以支持本机结果排序 这在 order by 键与查询键不同的情况下很重要 如果属性键不是索引的一部分 则排序需要将所有结果加载到内
  • JanusGraph .net C#

    嘿 谁能帮我弄清楚如何使用 C JanusGraph net 连接到托管多个图形的远程 JanusGraph 服务器并查询特定图形 按图形名称 我可以连接到服务器 但无法查询特定图表 var c JanusGraph Net JanusGr
  • 为什么 Gremlin JavaScript 使用“from_”映射而不是“from”?

    在发现你必须使用之前我为此苦苦挣扎了几个小时from 代替from使用 gremlin javascript 时 在深入研究源代码后 我终于发现代码正在使用from 代替from see code 因为我是新手 所以这很奇怪 因为它的对应部
  • 变量 - 海王星上的 Gremlin

    我位于 Gremlin 控制台并连接到 AWS Neptune 数据库 g V hasLabel Risk toList 提供了预期的结果 但是当我尝试将结果分配给变量时 risks g V hasLabel Risk toList 我收到
  • 使用 Gremlin 和 Java 连接 JanusGraph 出现序列化异常(遇到未注册的类 ID:65536)

    我正在尝试使用以下 Java 程序连接到 Janus Graph 我正在尝试从现有图表中获取条目 我正在使用 Janusgraph 0 4 0 和 Cassandra 3 11 5 Graph graph EmptyGraph instan
  • 使用 Gremlin 在二部图上随机游走

    我想根据给定的用户偏好 用户喜欢的项目 基于使用groovy中的gremlin在有向二分图上进行随机游走来对项目进行排名 该图具有以下基本结构 用户1 喜欢 gt 项目A 项目B 此后我提出的查询 def runRankQuery def
  • 通过 Tinkerpop 使用特定模型将(数百万行)数据导入 Janusgraph 的最佳方法

    刚开始使用 Tinkerpop 和 Janusgraph 我正在尝试根据文档来解决这个问题 我有三个数据集 每个数据集包含大约 2000 万行 csv 文件 有一个特定的模型 其中的变量和行需要连接 例如什么是顶点 什么是标签 什么是边 等
  • 如何获取 Titan 中的索引键列表?

    我正在使用 Titan v0 3 1 并且希望查看我已经通过索引建立索引的键的列表createKeyIndex 我怎样才能做到这一点 在 Gremlin shell 中 您可以使用蓝图键可索引图 https github com tinke
  • Tinkerpop 3:使用 Gremlin 遍历计算连接组件

    我认为标签很好地解释了我的问题 我一直在尝试编写 Gremlin 遍历来计算帖子末尾描述的简单图的连接组件 我尝试过 g V repeat both e until cyclicPath dedup tree by name next 获得
  • CosmosDB 创建 - API 选项(SQL 与 Graph)

    我有兴趣使用Azure CosmosDB https learn microsoft com en us azure cosmos db 因为它的图形功能 通过查看文档 我发现它将图形顶点和边作为 JSON 文档 具有商定的模式 因此可以作
  • Gremlin Python createIndex (Tinkerpop)

    我目前正在使用 Tinkerpop 与gremlin python 客户端 https pypi python org pypi gremlinpython 3 2 4使用默认的TinkerGraph Gremlin https tinke
  • python gremlin连接超时问题

    获取 gremlin 驱动程序超时问题如下 我们已经提高了吞吐量并进行了尝试 但仍然在进行中 12 05 2019 06 50 33 gt 1376bf ERR Traceback most recent call last 12 05 2
  • 使用 pythongremlin 删除 AWS Neptune 上的所有边

    我正在使用 gremlinpython 版本 3 3 2 和 AWS NEPTUNE 我尝试删除所有边 也尝试过顶点 但每次都失败 g E drop iterate 给我 gremlin python driver protocol Gre
  • Neptune Jupyter 笔记本未显示图表选项卡

    在 Neptune 笔记本中 我添加顶点如下 gremlin g addV labelC property T id 153 然后我做gremlin p v oute inv选项可查看如下所示的可视化图形表示 参考 https docs a
  • 在 Gremlin 中合并地图

    我正在尝试编写一个满足响应对象中两个要求的查询 必须包括all顶点的属性 无需在查询中指定各个字段 必须将结果展平到对象的同一水平上 作为单独的查询 我可以这样做 1 valueMap query g V 1 valueMap by unf
  • Gremlin 找到最高匹配

    我计划使用图形数据库 AWS Neptune 可以使用 Gremlin 作为一种知识库进行查询 知识库将用作具有多个特征的实体的分类工具 为简单起见 我在本示例中使用几何形状来编码实体的属性 假设我想对与正方形 三角形和圆形相关的点进行分类
  • 如果 1 个 Gremlin 查询中不存在顶点和边,则创建

    我找到以下代码来创建边缘 如果它尚不存在 g V hasLabel V1 has userId userId as a V hasLabel V1 has userId userId2 coalesce bothE link where o

随机推荐