我是Graph数据库的新手,我无法解决下面列出的问题。
我如何能够实现OrientDb查询
TRAVERSE OUT() FROM (SELECT FROM SomeClassThatExtendsV WHERE name = 'SomeUsefulName')
如果我将通过OrientDb java api执行此查询:
new OSQLSynchQuery<Vertex>("TRAVERSE OUT() FROM (SELECT FROM SomeClassThatExtendsV WHERE name = 'SomeUsefulName')");
结果将是包含子和孩子的所有子项目等等。
我需要使用gremlin api实现相同的逻辑,这就是我所拥有的:
GraphQuery query = framedGraph.getBaseGraph().query().has("@class", "SomeClassThatExtendsV").has("name", "SomeUsefulName");
OrientVertex vertex = (OrientVertex) query.vertices().iterator().next();
Tree tree = new Tree();
new GremlinPipeline(vertex).out().tree(tree).loop("TestLoop", loopBundle -> false).iterate();
Iterator it = tree.entrySet().iterator();
while (it.hasNext()) {
Map.Entry pair = (Map.Entry)it.next();
System.out.println(pair.getKey() + " = " + pair.getValue());
}
结果我有NullPointerException。
java.lang.NullPointerException
at com.tinkerpop.pipes.branch.LoopPipe.getLoops(LoopPipe.java:75)
at com.tinkerpop.pipes.branch.LoopPipe.processNextStart(LoopPipe.java:49)
at com.tinkerpop.pipes.AbstractPipe.next(AbstractPipe.java:89)
at com.tinkerpop.pipes.util.Pipeline.next(Pipeline.java:115)
at com.tinkerpop.pipes.util.PipeHelper.iterate(PipeHelper.java:35)
at com.tinkerpop.gremlin.java.GremlinPipeline.iterate(GremlinPipeline.java:1542)
也许我在GremlinPipeline中做错了什么?
此时我不知道完整的图形结构,我需要得到像树一样的东西,或类似于OrientDb工作室的结果。
这里有些更新,我尝试使用循环,但正如我之前所说,我无法设置循环次数,因此我的测试应用程序卡住了,因为在某些顶点我有边缘和边缘。
有人可以帮我解决这个问题吗?