我正在尝试编写一个 gremlin 查询来查找具有另一个查询结果集中的值的所有节点,类似于 SQL 的“in”子句。
例如:
select * from myTable
where someVal in (select someVal from otherTable)
这个问题可能是这个问题的重复,但那里给出的答案不适用于我,因为我无法对我的图表进行线性扫描,因为我的 IN 子句的值是查询的动态结果而不是静态列表。
你会想要使用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。