在 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);
});
我在 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);
});