Gremlin 如何查询顶点与具有相同标签的其他顶点之间是否有多条边

Gremlin 如何查询顶点与具有相同标签的其他顶点之间是否有多条边,gremlin,tinkerpop3,gremlinpython,Gremlin,Tinkerpop3,Gremlinpython,我试图找出哪些“过滤器”顶点有多条边到具有相同标签的顶点。例如,在本例中,“filter:2”有两条边指向标签“projectType”相同的顶点。“filter:3”也是如此,因为它有3条边指向顶点“projectType” 我试图尝试“循环”步骤,但我总是从控制台得到一个错误。我用的是海王星 顶点 边缘 用于创建顶点和边的控制台代码 g.V().hasLabel('filter').as('x').outE().inV().loop('x')。{it.loops

我试图找出哪些“过滤器”顶点有多条边到具有相同标签的顶点。例如,在本例中,“filter:2”有两条边指向标签“projectType”相同的顶点。“filter:3”也是如此,因为它有3条边指向顶点“projectType”

我试图尝试“循环”步骤,但我总是从控制台得到一个错误。我用的是海王星

顶点 边缘 用于创建顶点和边的控制台代码
g.V().hasLabel('filter').as('x').outE().inV().loop('x')。{it.loops<3}.path()
{“requestId”:“d63968ad-6c63-41f8-bfff-b31b09077a92”,“代码”:“格式错误的QueryException”,“详细消息”:“查询解析在第1行失败,字符位置在68,错误消息:令牌识别错误在:'it.'”}


考虑到您试图解决问题,我不清楚您希望得到什么结果,但如果我从字面上理解您的问题,您似乎希望得到一个具有多个标签的“过滤器”顶点列表,即“过滤器:2”和“过滤器:3”。如果是这样,那么:

gremlin> g.V().hasLabel('filter').
......1>   filter(out().
......2>          groupCount().by(label).
......3>          unfold().
......4>          select(values).
......5>          is(gt(1))).
......6>   values('id')
==>filter:2
==>filter:3

filter()
步骤遍历输出边并计算相邻顶点上的所有标签。然后在第3行,它展开标签和计数的结果
Map
,并仅提取计数(即
select(values)
提取
Map
条目中作为计数的键/值对的值),然后用
is(gt(1))过滤这些计数
表示当前顶点至少存在一种情况,即相邻顶点具有多个标签

鉴于您试图解决问题,我不清楚您希望得到的结果是什么,但如果我从字面上理解您的问题,您似乎希望得到一个“过滤器”列表具有多个标签(即“过滤器:2”和“过滤器:3”)的顶点。如果是这样,那么:

gremlin> g.V().hasLabel('filter').
......1>   filter(out().
......2>          groupCount().by(label).
......3>          unfold().
......4>          select(values).
......5>          is(gt(1))).
......6>   values('id')
==>filter:2
==>filter:3
filter()
步骤遍历输出边并计算相邻顶点上的所有标签。然后在第3行,它展开标签和计数的结果
Map
,并仅提取计数(即
select(values)
提取
Map
条目中作为计数的键/值对的值),然后用
is(gt(1))过滤这些计数
表示当前顶点至少有一种情况,其中相邻顶点具有多个标签

g.addV('filter').property('id','filter:1').as('f1').addV('filter').property('id','filter:2').as('f2').addV('filter').property('id','filter:3').as('f3').addV('projectType').property('id','projectType:1').as('p1').addV('projectType').property('id','projectType:2').as('p2').addV('projectType').property('id','projectType:3').as('p3').addV('projectType').property('id','projectType:4').as('p4').addV('city').property('id','city:1').as('c1').addV('city').property('id','city:2').as('c2').addV('city').property('id','city:3').as('c3').addE('services').from('f1').to('p1').addE('services').from('f2').to('p1').addE('services').from('f2').to('p2').addE('services').from('f3').to('p2').addE('services').from('f3').to('p3').addE('services').from('f3').to('p4').addE('services').from('f1').to('c2').addE('services').from('f2').to('c1').addE('services').from('f3').to('c1')
g.V().hasLabel('filter').as('x').outE().inV().loop('x').{it.loops < 3}.path()
gremlin> g.V().hasLabel('filter').
......1>   filter(out().
......2>          groupCount().by(label).
......3>          unfold().
......4>          select(values).
......5>          is(gt(1))).
......6>   values('id')
==>filter:2
==>filter:3