在 Gremlin 中创建从一个遍历到另一个遍历的边

Create edges from one traversal to another in Gremlin

我在 Java 中使用 Gremlin API。 假设我们有一个遍历 persons 和另一个遍历 locations 的时间很长并且依赖于第一个:

GraphTraversal<?, Vertex> persons = g.V().has("prop", "value");
GraphTraversal<?, Vertex> locations = persons.out("place").has(..)..;

现在我想 link 每个人到与直接 link 的人相对应的位置,考虑到其中一些边缘已经到位。

在 Java 中使用 Gremlin API 执行此类 link 哪种策略比较好?

我找不到一种简单的方法来 link 具有多对多关系的两个顶点流。但是获取一组对象并在循环中创建边缘通常对我来说一对多工作:

Set<Object> personVertexIds = persons.id().toSet();
personVertexIds.forEach(id -> {
    GraphTraversal<Vertex, Vertex> person = g.V(id).as("p");
    GraphTraversal<?, Vertex> locations = persons.out("place").has(..)..;
    locations.coalesce(inE("link").where(outV().where(P.eq("p"))),
          addE("link").from("p")).property("prop", value);
});