0

我们在项目中使用 Gremlin JavaScript 语言变体和 Amazon Neptune,并且我们有多个用于批量创建顶点和边的用例。

一个简单的示例是包含 200 - 1000 个用户的数组。我需要执行一个批处理查询来检查用户是否存在。如果用户存在,则添加具有属性的顶点,否则忽略该用户。所有这些条件都需要批量完成。

注意:需要避免使用 Gremlin 脚本。所以遍历是我正在寻找的。

4

1 回答 1

3

可以使用包含要插入的数据的地图列表来为查询播种。您可以进一步扩展模式以使用一个coalesce步骤来执行条件插入。使用此处的航线数据集是一个简单的示例,它创建了一个新XYZ机场并计算出其他机场已经存在。请注意,中间遍历V步骤使这个查询变得有点昂贵,因为对于列表中的每个地图,所有顶点都必须被“搜索”。

g.inject([['code':'AUS'],['code':'XYZ'],['code':'SFO']]).
  unfold().as('data').
  coalesce(V().hasLabel('airport').
    where(eq('data')).
      by('code').
      by(select('code')),
    addV('airport').
      property('code',select('code')))

还有一些关于使用这种模式来避免查询中的长链addVaddE步骤的讨论。

https://tinkerpop.apache.org/docs/current/recipes/#long-traversals

运行查询时,您可以看到为 XYZ 机场创建了一个新 ID,并为其他机场找到了现有 ID。

gremlin> g.inject([['code':'AUS'],['code':'XYZ'],['code':'SFO']]).
......1>   unfold().as('data').
......2>   coalesce(V().hasLabel('airport').
......3>     where(eq('data')).
......4>       by('code').
......5>       by(select('code')),
......6>     addV('airport').
......7>       property('code',select('code')))
==>v[3]
==>v[61286]
==>v[23]    
于 2021-10-28T16:33:42.490 回答