Gremlin 查询获胜的小精灵';不要使用标记顶点的值

Gremlin 查询获胜的小精灵';不要使用标记顶点的值,gremlin,tinkerpop,amazon-neptune,Gremlin,Tinkerpop,Amazon Neptune,我试图在海王星上的一个查询中找到两个顶点之间的边缘,但有些事情真的很奇怪 这是问题 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("

我试图在海王星上的一个查询中找到两个顶点之间的边缘,但有些事情真的很奇怪

这是问题

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)
我知道这很复杂,但我的想法是:

  • 访问主顶点,将对is的引用保存为“PRINCIPAL”,将对其id的引用保存为“PRINCIPAL\u id”
  • 访问它的out()顶点并将它们标记为“license”,我还将保存它们的值映射以备以后使用
  • 返回许可证,并获取标记为“已附加到”的边所关联的所有in()顶点,将对这些顶点的引用另存为“附件”
  • 回到许可证,但现在,我想获得指向我的“主体”(从前面开始)的边缘。这就是奇怪的地方,无论我在这里做什么,我都无法让它识别where子句中的主体。上面的例子失败了,但是如果我复制粘贴文本id,它就可以正常工作

  • 我遗漏了什么?

    将查询第二行到最后一行的
    步骤替换为:

    filter(out().where(eq('principal')).by(T.id))
    
    这应该能让它工作

    hasId
    步骤可以采用诸如
    gt(123)
    之类的谓词,也可以采用一个或多个ID值的列表。这就是为什么使用ID值时它会起作用