我有这个图表示例:
我要做的是使用以下命令填充有序列表:
outE("ContainsB")
边(预期边缘:[6,7]
)out("ContainsB").out("ContainsC")
个顶点(预期顶点:[1,3]
)out("ContainsB").out("ContainsD")
个顶点(预期顶点:[2,4]
)保持order
ContainsB
属性的排序
到目前为止,这是我没有任何订购的内容:
Map<String, Object> map = g.V(a.id())
.project("A", "ContainsBEdges", "CVertices","DVertices")
.by()
.by(outE("ContainsB").fold())
.by(outE("ContainsB").inV().out("ContainsC").fold())
.by(outE("ContainsB").inV().out("ContainsD").fold())
.next();
我有类似的想法,尽管从小例子来看它不适用于两步之外的by()
表达式:
Map<String, Object> map = g.V(a.id())
.project("A", "ContainsBEdges", "CVertices","DVertices")
.by()
.by(outE("ContainsB").order().by("order").fold())
.by(outE("ContainsB").order().by("order").inV().out("ContainsC").fold())
.by(outE("ContainsB").order().by("order").inV().out("ContainsD").fold())
.next();
后来我做了:
Vertex a = (Vertex) map.get("A");
List<Edge> containsBEdges = (List<Edge>) map.get("ContainsBEdges");
List<Vertex> cVertices = (List<Vertex>) map.get("CVertices");
List<Vertex> dVertices = (List<Vertex>) map.get("DVertices");
根据Gremlin文档,我不应该依赖任何排序,除非它是显式的order()
所以我想知道如何遍历有序路径,这些路径以一组明确的有序边开始,并确保事情将会继续使用下一个版本。
谢谢!
答案 0 :(得分:4)
让我们从一个脚本开始创建您的图表,以便其他人可以继续:
g = TinkerGraph.open().traversal()
g.addV("A").property(id, 5).as("a").
addV("B").property(id, 8).as("b1").
addV("B").property(id, 9).as("b2").
addV("C").property(id, 1).as("c1").
addV("C").property(id, 3).as("c2").
addV("D").property(id, 2).as("d1").
addV("D").property(id, 4).as("d2").
addE("ContainsB").property(id, 6).property("order", 0).from("a").to("b1").
addE("ContainsB").property(id, 7).property("order", 1).from("a").to("b2").
addE("ContainsC").from("b1").to("c1").
addE("ContainsC").from("b2").to("c2").
addE("ContainsD").from("b1").to("d1").
addE("ContainsD").from("b2").to("d2").iterate()
现在回到你的遍历问题(老实说,我不知道你为什么试图用project()
来解决问题):
outE("ContainsB")
边(预期边缘:[6,7]
)
gremlin> g.V().outE("ContainsB").order().by("order").id().fold()
==>[6,7]
out("ContainsB").out("ContainsC")
个顶点(预期顶点:[1,3]
)
gremlin> g.V().outE("ContainsB").order().by("order").inV().
out("ContainsC").id().fold()
==>[1,3]
out("ContainsB").out("ContainsD")
个顶点(预期顶点:[2,4]
)
gremlin> g.V().outE("ContainsB").order().by("order").inV().
out("ContainsD").id().fold()
==>[2,4]