嗨:我是Gremlin和Orient-db的傻瓜。我正在玩Gremlin和java中的db。我能够使用可用的方法查询我的顶点和边缘并获得结果。我使用back(“Alias-name”)来获取查询的结果顶点。
我的问题是我可以得到所有结果顶点的图形(相关图形和结果的信息),因为现在我能够得到顶点但我想得到我的结果的整个“子图”信息同一查询中的顶点。
非常感谢任何帮助。
这是一个带有通用示例的代码:
GremlinPipeline startPipe = pipe.has("friend-name", "friend-name")
.in("friend-depends").as("friend-depends")
.outE("resource-depends").inV()
.has("resource-name", "car")
.back("friend-depends");
v(Friend)[#15:13]
v(Friend)[#15:7]
v(Friend)[#15:12]
结果是对的,但我希望得到结果
Friend#15:13{friend-name:Frank,Friend-type:Personal,in_depends:#17:10 (friend of friends),... with edges} v2
谢谢, Sabari
答案 0 :(得分:1)
Gremlin没有提供明确的subgraph
函数(截至未发布的2.5.0)。使用Gremlin获取子图的唯一方法是自己显式提取这些图元素。我的偏好是简单地sideEffect
内存中TinkerGraph的元素。你可以在这里看到一个例子:
http://gremlindocs.com/#recipes/subgraphing
鉴于您修改过的问题,您可以使用path
步骤获取路径的各个部分,如下所示:
gremlin> g = TinkerGraphFactory.createTinkerGraph();
==>tinkergraph[vertices:6 edges:6]
gremlin> g.v(1).outE.inV.path
==>[v[1], e[9][1-created->3], v[3]]
==>[v[1], e[7][1-knows->2], v[2]]
==>[v[1], e[8][1-knows->4], v[4]]
gremlin> g.v(1).outE.inV.has('age',T.gte,31).path
==>[v[1], e[8][1-knows->4], v[4]]
看起来有点像你在找什么。从那里你可以sideEffect
到一个子图。从那里你可以选择不再使用back
:
gremlin> g.v(1).outE.inV.has('age',T.gte,31).path.sideEffect{println it}.collect{it.last()}
[v[1], e[8][1-knows->4], v[4]]
==>v[4]
或坚持下去:
gremlin> g.v(1).as('x').outE.inV.has('age',T.gte,31).path.sideEffect{println it}.back('x')
[v[1], e[8][1-knows->4], v[4]]
==>v[1]