如何在单个gremlin查询中添加多个边?

时间:2016-07-04 12:55:11

标签: gremlin tinkerpop3

我的方案是在单个查询中的顶点之间添加多条边:

假设下面的节点: 这些是我拥有的标签和ID

用户

4100

歌曲

4200

4355

4676

我必须在这些顶点之间建立边

4100 --> 4200, 
4100 --> 4355, 
4100 --> 4676.

我们可以通过在node.in之间创建单个边来正常地执行它。如果我们想要一次在50个以上的顶点之间创建边,则这不是一种有效的方法。我正在使用Tinkerpop 3.0.1

4 个答案:

答案 0 :(得分:6)

我有类似的问题。使用C#SDK,我这样做:

g.V('4100')
.addE('knows').to(g.V('4200')).outV()
.addE('knows').to(g.V('4355')).outV()
.addE('knows').to(g.V('4676'))

答案 1 :(得分:4)

使用最新的Tinkerpop。您可以执行以下操作:

创建示例图表:

gremlin> graph = TinkerGraph.open();
gremlin> graph.addVertex("User").property("id", 4100);
==>vp[id->4100]
gremlin> graph.addVertex("Song").property("id", 4200);
==>vp[id->4200]
gremlin> graph.addVertex("Song").property("id", 4355);
==>vp[id->4355]
gremlin> graph.addVertex("Song").property("id", 4676);
==>vp[id->4676]

现在在一次遍历中添加边缘:

gremlin> graph.traversal().V().hasLabel("User").as("a").
         V().hasLabel("Song").
         addE("edge to song").from("a");
==>e[8][0-edge to song->2]
==>e[9][0-edge to song->4]
==>e[10][0-edge to song->6]

This显示了在遍历中使用addE作为副作用的另一个示例。

答案 2 :(得分:2)

如果你有顶点id,那么按id查找是非常有效的。如果您使用的是Gremlin Server,则对Gremlin Server的每个请求都将被视为单个事务。您可以在单个请求(带有绑定)上传递Gremlin查询中的多个语句,而不是发送多个请求。用分号分隔Gremlin查询中的语句。

l=[4200, 4355, 4676]; v=graph.vertices(4100).next(); l.each { v.addEdge("knows", graph.vertices(it).next()) }

答案 3 :(得分:-1)

试试这个

gremlin> songs = g.V().has("album","albumname")).toList();user = g.V().has('fullName','arunkumar').next(); songs.each{user.addEdge("in",it)} 

gremlin> g.E() //check the edge

希望这会有所帮助:)