Groovy 存储小精灵计数值并在稍后的遍历中进行比较

Groovy 存储小精灵计数值并在稍后的遍历中进行比较,groovy,graph,gremlin,traversal,Groovy,Graph,Gremlin,Traversal,我对Gremlin不熟悉,刚刚开始学习。我有一个图,其中每个顶点都有一个属性可引用。限定名称和\u typeName 带有“\uuu typeName”作为“avro\u schema”和“avro\u field”的顶点之间的边标签是“\uu avro\u record.fields”,“avro\u schema”(1)和“avro\u field”(多个)之间存在1对多关系 将“\uuu typeName”作为“avro\u字段”和“DataClassification”的顶点之间的边标签

我对Gremlin不熟悉,刚刚开始学习。我有一个图,其中每个顶点都有一个属性可引用。限定名称\u typeName

带有“\uuu typeName”作为“avro\u schema”和“avro\u field”的顶点之间的边标签是“\uu avro\u record.fields”
,“avro\u schema”(1)和“avro\u field”(多个)之间存在1对多关系

将“\uuu typeName”作为“avro\u字段”和“DataClassification”的顶点之间的边标签是“classifiedAs”,并且“avro\u字段”(1)和“DataClassification”(多)之间存在1对多关系

我想找出图中所有“avro_schema”顶点属性“Referenceable.qualifiedName”,其中每个“avro_字段”都与“DataClassification”有“classifiedAs”关系。

我尝试了gremlin查询,以找出给定的特定avro_模式,找出avro_字段的数量,该字段通过ClassifiedDas与DataClassification有关系。这很有效

但我无法记录avro_模式到avro_字段之间的边数,然后与与数据分类类型相关的avro_字段数进行比较

这给出了给定avro_模式的分类avro_字段的数量

g.V().has('uuu typeName','avro_schema').has('Referenceable.qualifiedName','com.example.avro.test2Complicated16').outE('uu avro_record.fields').inV().out('classifiedAs').has('uu typeName','tDataClassification').count()

此外,我还尝试在满足条件的所有avro_模式中聚合此项,但它不起作用

g.V().has('uuuu typeName','avro_schema')。其中(identity().out('uuu avro_record.fields')。store('sumi')。out('classifiedAs')。has('uuu typeName','DataClassification')。count().is(eq('sumi.size()))。value('Referenceable.qualifiedName')

我想知道所有的avro_模式,其中所有的avro_字段都与DataClassification有任何“classifiedAs”边缘关系

在进一步尝试之后,我开始进行查询,但集合“xm”的大小始终返回为0


g.V().has('uuuu typeName','avro_schema').local(out('uuu avro_record.fields').store('xm').local(out('classifiedAs').has('uu typeName','DataClassification').count().is(eq(1)).count().is(eq(select('xm').size())
不确定我是否正确地遵循了问题描述,但对于您可能要寻找的遍历,这里有一个粗略的猜测:

g.V().has('__typeName','avro_schema').not(
    out('__avro_record.fields').
    out('classifiedAs').has('__typeName',neq('DataClassification'))).
  values('Referenceable.qualifiedName')
更新

// at least one __avro_record.fields relation
g.V().has('__typeName','avro_schema').filter(
    out('__avro_record.fields').
    groupCount().
      by(choose(out('classifiedAs').has('__typeName','DataClassification'),
                  constant('y'), constant('n'))).
    and(select('y'), __.not(select('n')))).
  values('Referenceable.qualifiedName')

// include avro_schema w/o __avro_record.fields relations
g.V().has('__typeName','avro_schema').not(
    out('__avro_record.fields').
    groupCount().
      by(choose(out('classifiedAs').has('__typeName','DataClassification'),
                  constant('y'), constant('n'))).
    select('n')).
  values('Referenceable.qualifiedName')

上面的查询返回所有的“avro_模式”,其中没有一个avro_字段至少有一个“classifiedAs”边缘的事件顶点的“\uu typeName”属性作为数据分类。我需要的是所有的“avro_模式”,其中所有的“avro_字段”至少有一个“classifiedAs”边缘的事件顶点的“\uu typeName”属性作为数据分类。