我正在玩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();
但我面临的问题是我应该如何在2个顶点之间添加边缘。一般来说,我们在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服务器创建边缘?
答案 0 :(得分:4)
首先,做graph.traversal()
不是一个好的模式。创建一次GraphTraversalSource
并重复使用:
gremlin> graph = TinkerGraph.open()
==>tinkergraph[vertices:0 edges:0]
gremlin> g = graph.traversal()
==>graphtraversalsource[tinkergraph[vertices:0 edges:0], standard]
至于您的问题,您的“getOrInsert”代码行返回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]