Graph 小精灵:如何合并遍历路径上遇到的两个对象的选定属性

Graph 小精灵:如何合并遍历路径上遇到的两个对象的选定属性,graph,titan,gremlin,graph-traversal,property-graph,Graph,Titan,Gremlin,Graph Traversal,Property Graph,让我们假设我有来自不同农场树木的苹果。所以树上结苹果,农场里也有树。我想要一份苹果的清单,其中还包括它们来自的农场 g = new TinkerGraph(); // apples a1 = g.addVertex("a1"); a1.setProperty("type", "apple"); a2 = g.addVertex("a2"); a2.setProperty("type", "apple"); a3 = g.addVertex("a3"); a3.setProperty("ty

让我们假设我有来自不同农场树木的苹果。所以树上结苹果,农场里也有树。我想要一份苹果的清单,其中还包括它们来自的农场

g = new TinkerGraph();

// apples
a1 = g.addVertex("a1");
a1.setProperty("type", "apple");

a2 = g.addVertex("a2");
a2.setProperty("type", "apple");

a3 = g.addVertex("a3");
a3.setProperty("type", "apple");


// trees
t1 = g.addVertex("t1");
t1.setProperty("type", "tree");

t2 = g.addVertex("t2");
t2.setProperty("type", "tree");


// farms
f1 = g.addVertex("f1");
f1.setProperty("type", "farm");
f1.setProperty("uid", "f1");

f2 = g.addVertex("f2");
f2.setProperty("type", "farm");
f2.setProperty("uid", "f2");

g.addEdge(t1, a1, "bears");
g.addEdge(t1, a2, "bears");
g.addEdge(t2, a3, "bears");

g.addEdge(f1, t1, "has");
g.addEdge(f2, t2, "has");
我想遍历和绘制图表来报告每个苹果,并在其中包含农场id。我试过这样的方法:

g.V.has("type", "apple").copySplit(_().in("bears").in("has").map("uid"),
                                  _().map()).fairMerge
我得到的结果是:

==>{uid=f1}
==>{type=apple}
==>{uid=f1}
==>{type=apple}
==>{uid=f2}
==>{type=apple}
我想要的是:

==>{uid=f1, type=apple}
==>{uid=f1, type=apple}
==>{uid=f2, type=apple}

假设TinkerPop 2.x,您可以通过
转换来实现这一点:

gremlin> g.V.has("type", "apple").transform{
gremlin>   m = [:] 
gremlin>   m<<it.in("bears").in("has").map("uid").next(); 
gremlin>   m<<it.map() }
==>{uid=f1, type=apple}
==>{uid=f1, type=apple}
==>{uid=f2, type=apple}
与:


假设TinkerPop 2.x,您可以通过
转换来实现这一点:

gremlin> g.V.has("type", "apple").transform{
gremlin>   m = [:] 
gremlin>   m<<it.in("bears").in("has").map("uid").next(); 
gremlin>   m<<it.map() }
==>{uid=f1, type=apple}
==>{uid=f1, type=apple}
==>{uid=f2, type=apple}
与:

gremlin> g = graph.traversal()
==>graphtraversalsource[tinkergraph[vertices:7 edges:5], standard]
gremlin> g.V().hasLabel("apple").as('type').in('bears').in('has').as('uid').select('type','uid').by(label()).by('uid')
==>[type:apple, uid:f1]
==>[type:apple, uid:f1]
==>[type:apple, uid:f2]