用于添加边缘的 gremlin 服务器查询

gremlin server query for adding edge

我正在玩 titan db(cassandra 和 es 后端)。我正在通过 nodejs 中的 gremlin-javascript 模块向 gremlin 服务器发送查询。我已经能够使用 graph.traversal().V().has(idKey,idVal).tryNext().orElseGet{ graph.addVertex(T.label,"product","product_id",991);graph.tx().commit();

在 titan 中编写 getOrInsert 顶点

但我面临的问题是我应该如何在两个顶点之间添加一条边。通常我们在 gremlin 中做的是

a=graph.traversal().addVertex(...some properties);
b=graph.traversal().addVertex(...some properties);
a.addEdge("someEdgeType",b);

我发现 grex 模块很有用,因为它支持

// JavaScript
var query = gremlin();
var bob = query.var(g.addVertex({ name: 'Bob' }));
var alice = query.var(g.addVertex({ name: 'Alice' }));
query(g.addEdge(bob, alice, 'likes', { since: 'now' }));

我无法使用 grex 模块(它支持 2.0),因为我使用的是 gremlin 3.0.1,并且编写查询的格式已更改(我认为!)。

我的用例:我应该能够将 gremlin 查询发送到远程 gremlin 服务器。

是否存在任何其他类似 grex 的模块来简化查询创建? 我应该如何通过查询 gremlin 服务器来创建边缘?

首先,graph.traversal() 不是一个好的模式。创建您的 GraphTraversalSource 一次并重新使用它:

gremlin> graph = TinkerGraph.open()
==>tinkergraph[vertices:0 edges:0]
gremlin> g = graph.traversal()
==>graphtraversalsource[tinkergraph[vertices:0 edges:0], standard]

至于你的问题,你的 "getOrInsert" 行代码 returns 一个 Vertex,所以只用它来创建你的 Edge:

gremlin> v1 = g.V().has('k',1).tryNext().orElseGet{graph.addVertex('k',1)}
==>v[0]
gremlin> v1.addEdge('self',v1)
==>e[2][0-self->0]