查询不会使用标记顶点的值的 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)
我知道这很复杂,但我的想法是:
- 访问一个 PRINCIPAL 顶点,将对 is 的引用保存为 "principal" 并将对其 id 的引用保存为 "principal_id"
- 访问它的 out() 顶点并将它们标记为 "license",我也保存它们的值映射供以后使用
- return 许可,并获取所有由标记为 "is attached to" 的边关联的 in() 顶点,将对这些顶点的引用保存为 "attachments"
- return 获得许可,但现在,我想要获得指向我的 "principal"(从之前的)的边缘。这就是它变得奇怪的地方,无论我在这里做什么,我都无法让它识别 where 子句中的委托人。上面的例子失败了,但是如果我复制粘贴文字 id,它就可以正常工作
我错过了什么?
将查询倒数第二行的 where
步骤替换为:
filter(out().where(eq('principal')).by(T.id))
这应该可以正常工作。
hasId
步骤可以采用谓词(例如 gt(123)
)或一个或多个 ID 值的列表。这就是当您使用 ID 值时它起作用的原因。
我试图在 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)
我知道这很复杂,但我的想法是:
- 访问一个 PRINCIPAL 顶点,将对 is 的引用保存为 "principal" 并将对其 id 的引用保存为 "principal_id"
- 访问它的 out() 顶点并将它们标记为 "license",我也保存它们的值映射供以后使用
- return 许可,并获取所有由标记为 "is attached to" 的边关联的 in() 顶点,将对这些顶点的引用保存为 "attachments"
- return 获得许可,但现在,我想要获得指向我的 "principal"(从之前的)的边缘。这就是它变得奇怪的地方,无论我在这里做什么,我都无法让它识别 where 子句中的委托人。上面的例子失败了,但是如果我复制粘贴文字 id,它就可以正常工作
我错过了什么?
将查询倒数第二行的 where
步骤替换为:
filter(out().where(eq('principal')).by(T.id))
这应该可以正常工作。
hasId
步骤可以采用谓词(例如 gt(123)
)或一个或多个 ID 值的列表。这就是当您使用 ID 值时它起作用的原因。