gremlin 查询 - 如何在 has 中使用 select

gremlin query - how to use select in has

测试数据如下:

g.addV('A').property('name','n').property('tag','key1');
g.addV('B').property('n','123');
g.addV('A').property('name','m').property('tag','key2');
g.addV('B').property('m','321')
g.V().hasLabel('A').addE('e').to(g.V().hasLabel('B'));

给定 'key1' 和 '123',我如何获得第一个 B 顶点? 我试过下面的查询,它不起作用 g.V().hasLabel('B').as('B').inE('e').outV().has('tag','key1').as('A').select('B').has(select('A').values('name'),'123')

g.V().has('A', 'tag', 'key1').
  out('e').
  has('B', 'n', '123')

第一行按标签“A”和属性“tag”==“key1”过滤。 第二行让 Gremlin 沿着“e”边出去。它将落在相邻的顶点上。 第三行按标签“B”和 属性“n”==“123”

过滤

您需要使用稍微不同的方法,将 has 替换为 where 步骤。令人困惑的是 has 步骤似乎应该能够接受任意遍历并产生其值。事实上,所有发生的事情是,如果在 has 内的遍历产生任何结果,它将被视为“真”。

gremlin>  g.V().hasLabel('A').
......1>        has('tag','key1').as('A').
......2>        out('e').
......3>        where(valueMap().select(select('A').values('name')).unfold().is('123')).     
......4>        valueMap(true)

==>[id:60872,label:B,n:[123]]