Gremlin 仅当“创建顶点”;从「;及;至;顶点存在

Gremlin 仅当“创建顶点”;从「;及;至;顶点存在,gremlin,amazon-neptune,gremlinnet,Gremlin,Amazon Neptune,Gremlinnet,我想在一个查询中创建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('se

我想在一个查询中创建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();
数据库中可能没有“到”(目标)顶点。在这种情况下,此查询也会失败。因此,在使用hasNext()执行此查询之前,我必须应用一个检查该顶点是否存在


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

您应该看看如何使用for each Vertex,如TinkerPop配方中所示

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

_g.V().HasLabel('person').Has('name', 'name1')
使用类似的方法(我没有.NET环境来测试语法):


这将充当向上插入,并返回现有顶点或使用name属性添加新顶点。然后,可以在To步骤上使用相同的图案,以确保在创建边之前它也存在。

如果顶点不存在,我不想创建顶点。我只想创建边,如果两个顶点都存在,否则只需跳过它。这也是我想为多个顶点创建这样的查询,并立即执行。您是试图从同一开始/结束位置创建多条边,还是开始/结束位置在边之间会发生变化?开始位置将相同,但结束位置将发生变化。
__.V().Has('person', 'name', 'name1').Fold().
coalesce(__.Unfold(), __.AddV('person').Property('name', 'name1')