1

我正在尝试编写一个 gremlin 查询来查找具有另一个查询结果集中的值的所有节点,类似于 SQL 的“in”子句。

例如:

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

这个问题可能是这个问题的重复,但那里给出的答案不适用于我,因为我无法对我的图表进行线性扫描,因为我的 IN 子句的值是查询的动态结果而不是静态列表。

4

1 回答 1

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

于 2013-10-22T10:51:58.113 回答