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]]
测试数据如下:
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]]