2013-10-22 83 views
0

我試圖編寫一個gremlin查詢來查找所有在另一個查詢的結果集中有一個值的節點,類似於SQL的'in'子句。Gremlin相當於SQL條款中的'

例如:

select * from myTable 
where someVal in (select someVal from otherTable) 

這個問題可能是this問題重複,但鑑於那裏的答案並不適用於我,因爲我不能做我的圖的線性掃描我的IN的值子句是查詢的動態結果而不是靜態列表。

回答

2

你會想要使用retain。您基本上將第一個查詢的結果存儲起來,並將這些結果用作retain步驟的輸入,以便保留通過匹配的管道的項目。一個簡單的例子:

gremlin> g = TinkerGraphFactory.createTinkerGraph() 
==>tinkergraph[vertices:6 edges:6] 
gremlin> firstResults = g.v(1).out.toList() 
==>v[2] 
==>v[4] 
==>v[3] 
gremlin> g.V.retain(firstResults) 
==>v[3] 
==>v[2] 
==>v[4] 

retain步驟通常配合使用aggregate

gremlin> x=[] 
gremlin> g.v(1).out.aggregate(x).out.retain(x) 
==>v[3] 

,或者你可以使用一個名爲步:

gremlin> g.v(1).out.as('x').out.retain(x) 
==>v[3] 

更多SQL轉換到精怪您可以查看:SQLToGremlin.com