use*_*923 1 graph gremlin azure-cosmosdb
在上图中,我有用户,客户端,站点和作业.用户连接到客户端(管理)和客户端(有) - >站点(有)--->作业.我正在努力让所有有活跃工作的客户.
g.V().hasLabel('user').
has('id', '338d219c-3457-4ad8-8172-37a7d897c0df').
outE('manages').
inV().
hasLabel('client').
outE('have').
inV().
hasLabel('site').
outE('have').
inV().
hasLabel('job').
has('status', 'In Progress')
Run Code Online (Sandbox Code Playgroud)
以上查询获取所有工作,但我有兴趣了解客户端,站点和工作.我想知道如何实现这一目标?
你可能没有多少方法可以做到这一点,但首先让我们简化你现有的Gremlin,因为你说它可以做你想要的:
g.V().has('user','id','338d219c-3457-4ad8-8172-37a7d897c0df').
out('manages').
hasLabel('client').
out('have').
hasLabel('site').
out('have').
has('job','status', 'In Progress')
Run Code Online (Sandbox Code Playgroud)
请注意,这样的outE().inV()组合基本上就是这样out().事实上,如果你把它们写成outE().inV()Gremlin将会遇到重新编写遍历的麻烦,就out()在应用策略时.请参阅explain()以下两个遍历:
gremlin> g.V().outE().inV().outE().inV().explain()
==>Traversal Explanation
=============================================================================================================================================================
Original Traversal [GraphStep(vertex,[]), VertexStep(OUT,edge), EdgeVertexStep(IN), VertexStep(OUT,edge), EdgeVertexStep(IN)]
ConnectiveStrategy [D] [GraphStep(vertex,[]), VertexStep(OUT,edge), EdgeVertexStep(IN), VertexStep(OUT,edge), EdgeVertexStep(IN)]
MatchPredicateStrategy [O] [GraphStep(vertex,[]), VertexStep(OUT,edge), EdgeVertexStep(IN), VertexStep(OUT,edge), EdgeVertexStep(IN)]
FilterRankingStrategy [O] [GraphStep(vertex,[]), VertexStep(OUT,edge), EdgeVertexStep(IN), VertexStep(OUT,edge), EdgeVertexStep(IN)]
InlineFilterStrategy [O] [GraphStep(vertex,[]), VertexStep(OUT,edge), EdgeVertexStep(IN), VertexStep(OUT,edge), EdgeVertexStep(IN)]
IncidentToAdjacentStrategy [O] [GraphStep(vertex,[]), VertexStep(OUT,vertex), VertexStep(OUT,vertex)]
AdjacentToIncidentStrategy [O] [GraphStep(vertex,[]), VertexStep(OUT,vertex), VertexStep(OUT,vertex)]
RangeByIsCountStrategy [O] [GraphStep(vertex,[]), VertexStep(OUT,vertex), VertexStep(OUT,vertex)]
RepeatUnrollStrategy [O] [GraphStep(vertex,[]), VertexStep(OUT,vertex), VertexStep(OUT,vertex)]
PathRetractionStrategy [O] [GraphStep(vertex,[]), VertexStep(OUT,vertex), VertexStep(OUT,vertex)]
LazyBarrierStrategy [O] [GraphStep(vertex,[]), VertexStep(OUT,vertex), NoOpBarrierStep(2500), VertexStep(OUT,vertex), NoOpBarrierStep(2500)]
TinkerGraphCountStrategy [P] [GraphStep(vertex,[]), VertexStep(OUT,vertex), NoOpBarrierStep(2500), VertexStep(OUT,vertex), NoOpBarrierStep(2500)]
TinkerGraphStepStrategy [P] [TinkerGraphStep(vertex,[]), VertexStep(OUT,vertex), NoOpBarrierStep(2500), VertexStep(OUT,vertex), NoOpBarrierStep(2500)]
ProfileStrategy [F] [TinkerGraphStep(vertex,[]), VertexStep(OUT,vertex), NoOpBarrierStep(2500), VertexStep(OUT,vertex), NoOpBarrierStep(2500)]
StandardVerificationStrategy [V] [TinkerGraphStep(vertex,[]), VertexStep(OUT,vertex), NoOpBarrierStep(2500), VertexStep(OUT,vertex), NoOpBarrierStep(2500)]
Final Traversal [TinkerGraphStep(vertex,[]), VertexStep(OUT,vertex), NoOpBarrierStep(2500), VertexStep(OUT,vertex), NoOpBarrierStep(2500)]
gremlin> g.V().out().out().explain()
==>Traversal Explanation
=============================================================================================================================================================
Original Traversal [GraphStep(vertex,[]), VertexStep(OUT,vertex), VertexStep(OUT,vertex)]
ConnectiveStrategy [D] [GraphStep(vertex,[]), VertexStep(OUT,vertex), VertexStep(OUT,vertex)]
MatchPredicateStrategy [O] [GraphStep(vertex,[]), VertexStep(OUT,vertex), VertexStep(OUT,vertex)]
FilterRankingStrategy [O] [GraphStep(vertex,[]), VertexStep(OUT,vertex), VertexStep(OUT,vertex)]
InlineFilterStrategy [O] [GraphStep(vertex,[]), VertexStep(OUT,vertex), VertexStep(OUT,vertex)]
IncidentToAdjacentStrategy [O] [GraphStep(vertex,[]), VertexStep(OUT,vertex), VertexStep(OUT,vertex)]
AdjacentToIncidentStrategy [O] [GraphStep(vertex,[]), VertexStep(OUT,vertex), VertexStep(OUT,vertex)]
RangeByIsCountStrategy [O] [GraphStep(vertex,[]), VertexStep(OUT,vertex), VertexStep(OUT,vertex)]
RepeatUnrollStrategy [O] [GraphStep(vertex,[]), VertexStep(OUT,vertex), VertexStep(OUT,vertex)]
PathRetractionStrategy [O] [GraphStep(vertex,[]), VertexStep(OUT,vertex), VertexStep(OUT,vertex)]
LazyBarrierStrategy [O] [GraphStep(vertex,[]), VertexStep(OUT,vertex), NoOpBarrierStep(2500), VertexStep(OUT,vertex), NoOpBarrierStep(2500)]
TinkerGraphCountStrategy [P] [GraphStep(vertex,[]), VertexStep(OUT,vertex), NoOpBarrierStep(2500), VertexStep(OUT,vertex), NoOpBarrierStep(2500)]
TinkerGraphStepStrategy [P] [TinkerGraphStep(vertex,[]), VertexStep(OUT,vertex), NoOpBarrierStep(2500), VertexStep(OUT,vertex), NoOpBarrierStep(2500)]
ProfileStrategy [F] [TinkerGraphStep(vertex,[]), VertexStep(OUT,vertex), NoOpBarrierStep(2500), VertexStep(OUT,vertex), NoOpBarrierStep(2500)]
StandardVerificationStrategy [V] [TinkerGraphStep(vertex,[]), VertexStep(OUT,vertex), NoOpBarrierStep(2500), VertexStep(OUT,vertex), NoOpBarrierStep(2500)]
Final Traversal [TinkerGraphStep(vertex,[]), VertexStep(OUT,vertex), NoOpBarrierStep(2500), VertexStep(OUT,vertex), NoOpBarrierStep(2500)]
Run Code Online (Sandbox Code Playgroud)
看看最后一行是如何相同的?在IncidentToAdjacentStrategy适用这种变化,所以最终都遍历编译为同样的事情.
在回答您的原始问题时,如果您需要拥有客户,网站和工作,请使用select():
g.V().has('user','id','338d219c-3457-4ad8-8172-37a7d897c0df').
out('manages').
hasLabel('client').as('c').
out('have').
hasLabel('site').as('s').
out('have').
has('job','status', 'In Progress').as('j').
select('c','s','j')
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
199 次 |
| 最近记录: |