我用来从选定顶点“ P1”中获取所有传出顶点(带有边缘标签“ has”)的列表的Gremlin查询,直到到达带有特定标签“ L3”的顶点为止:
g.V().has("id”,”P1”).repeat(out(“has”)).until(hasLabel(“L3”)).path().by("id")
正如预期的那样,上面的查询向我返回了选定顶点和标记为“ L3”的目标顶点之间的所有中间节点的列表。
但是,当在相反的方向上使用相同的查询(将“ out”更改为“ in”)时,即要获得从选定顶点到具有特定标签的目标顶点的所有传入顶点的列表,我会得到一个gremlin查询错误立即消失。
以下是查询:
g.V().has("id”,”P3”).repeat(in(“has”)).until(hasLabel(“L1”)).path().by("id")
错误看起来像这样:
Failure in submitting query:
Error: Script compile error: Missing ')'
尽管我在查询中没有看到任何遗漏的括号,但我对传入或传出顶点进行的查询之间的唯一变化是使用“输入”而不是“输出”。
在tinkerpop官方文档(https://tinkerpop.apache.org/docs/3.2.9/reference/#_traversal_strategies_2)中,在遍历策略中,我找不到带有repeat(in())的任何示例,只能找到带有repeat(out())的示例。是否有一种特殊的查询或方法来从选定的顶点获取所有传入的顶点,直到到达具有特定标签的顶点为止?
答案 0 :(得分:0)
我不确定这是否是您的问题,但是我可以看到您会在哪里得到错误,因为“ in”是Groovy中的保留字,因此,您必须使用匿名遍历类显式生成它:WITH res1
AS (
SELECT result
,ID
FROM #E
WHERE name = 'DOMAIN'
)
,res2
AS (
SELECT result
,ID
FROM #E
WHERE name = 'EXTENSION'
)
SELECT CONCAT (
res1.result
,res2.result
)
FROM RES1
INNER JOIN RES2 ON RES1.ID = RES2.ID
,因此:
__.in()
参考文档中的许多地方都记录了该问题,但也许您错过了它(您也参考了文档的较旧版本),例如在Vertex Steps中的注释中进行了说明。