查询不会使用标记顶点的值的 Gremlin

Gremlin where query won't use values from labeled vertices

我试图在 Neptun 上的单个查询中找到 2 个顶点之间的边,但有些事情真的很奇怪。

这是查询

g.V().has("PRINCIPAL", "principal id", "Test User").as("principal").id().as("principal_id")
.select("principal").out().hasLabel("LICENSE").as("license").valueMap(true).as("license_vm")
.select("license").in("is attached to").as("attachments")
.select("license").inE().where(outV().hasId(select("principal").id()))

.valueMap(true)

我知道这很复杂,但我的想法是:

  1. 访问一个 PRINCIPAL 顶点,将对 is 的引用保存为 "principal" 并将对其 id 的引用保存为 "principal_id"
  2. 访问它的 out() 顶点并将它们标记为 "license",我也保存它们的值映射供以后使用
  3. return 许可,并获取所有由标记为 "is attached to" 的边关联的 in() 顶点,将对这些顶点的引用保存为 "attachments"
  4. return 获得许可,但现在,我想要获得指向我的 "principal"(从之前的)的边缘。这就是它变得奇怪的地方,无论我在这里做什么,我都无法让它识别 where 子句中的委托人。上面的例子失败了,但是如果我复制粘贴文字 id,它就可以正常工作

我错过了什么?

将查询倒数第二行的 where 步骤替换为:

filter(out().where(eq('principal')).by(T.id))

这应该可以正常工作。

hasId 步骤可以采用谓词(例如 gt(123))或一个或多个 ID 值的列表。这就是当您使用 ID 值时它起作用的原因。