我正在尝试编写一个gremlin查询来查找具有另一个查询结果集中的值的所有节点,类似于SQL的'in'子句。
例如:
select * from myTable
where someVal in (select someVal from otherTable)
这个问题可能与this问题重复,但那里给出的答案不适用于我,因为我无法对我的图形进行线性扫描,因为我的IN子句的值是动态的结果。查询而不是静态列表。
答案 0 :(得分: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]
要获得更多到Gremlin的SQL转换,您可以查看:SQLToGremlin.com。