首页 > 解决方案 > 仅当“from”和“to”顶点存在时才创建顶点

问题描述

我想在单个查询中创建 1000 多个边。目前,我正在使用 AWS Neptune 数据库和 gremlin.net 来创建它。我面临的问题与速度有关。由于 HTTP 请求,它花费了大量时间。因此,我计划将我的所有查询组合成一个字符串并一次性执行。

_g.AddE("allow").From(_g.V().HasLabel('person').Has('name', 'name1')).To(_g.V().HasLabel('phone').Where(__.Out().Has('sensor', 'nfc'))).Next();

“To” (目标)顶点可能在数据库中不可用。在这种情况下,此查询也会失败。因此,在使用 hasNext() 执行此查询之前,我必须检查该顶点是否存在。

所以到目前为止它工作正常,但是当我考虑一次组合所有 1000+ 边缘创建时,是否可以编写一个不会中断的查询,如果找不到“To”(目标)顶点?

标签: gremlinamazon-neptunegremlinnet

解决方案


您应该查看对每个顶点使用元素存在模式,如 TinkerPop 食谱中所示。

在您的示例中,您将替换查询的这一部分:

_g.V().HasLabel('person').Has('name', 'name1')

像这样(我没有.NET环境来测试语法):

__.V().Has('person', 'name', 'name1').Fold().
coalesce(__.Unfold(), __.AddV('person').Property('name', 'name1')

这将充当 Upsert 并返回现有顶点或添加具有 name 属性的新顶点。然后可以在 To 步骤中使用相同的模式,以确保它在创建边缘之前就存在。


推荐阅读