存储 gremlin 计数值并稍后在遍历中进行比较

Storing gremlin count values and comparing later in traversal

我是 Gremlin 的新手,刚开始使用 it.I 有一个图,其中每个顶点都有一个 属性 Referenceable.qualifiedName__typeName.

'__typeName'作为'avro_schema'和'avro_field'的顶点之间的边标签是'__avro_record.fields' 并且 'avro_schema'(1) 和 'avro_field'(many) 之间存在一对多关系。

带有'__typeName'的顶点之间的边标签为'avro_field'和'DataClassification'是'classifiedAs' 并且 'avro_field'(1) 和 'DataClassification'(many) 之间存在一对多关系。

我想找出图中所有 'avro_schema' 个顶点 属性 'Referenceable.qualifiedName',其中每个 'avro_field' 与 'DataClassification'

我尝试了 gremlin 查询来找出给定的特定 avro_schema 找出与 DataClassification 通过 classifiedAs 有关系的 avro_field 的数量。这样可行。

但我无法计算 avro_schema 到 avro_field 之间的边数,然后与 avro_field 的数量进行比较,这与 DataClassification 类型有关。

这给出了分类的数量avro_field for a give avro_schema

g.V().has('__typeName','avro_schema').has('Referenceable.qualifiedName' , "com.example.avro.test2Complicated16").outE('__avro_record.fields').inV().out('classifiedAs').has('__typeName','tDataClassification').count()

我也尝试过聚合所有满足条件的 avro_schema,但它不起作用。

g.V().has('__typeName','avro_schema').where(identity().out('__avro_record.fields').store('sumi').out('classifiedAs').has('__typeName','DataClassification').count().is(eq('sumi'.size()))).values('Referenceable.qualifiedName')

我想知道所有 avro_schema,其中所有 avro_field 与 DataClassification

有任何 'classifiedAs' 边关系

在进一步尝试时,我开始进行查询,但集合 'xm' 的大小始终返回为 0。

g.V().has('__typeName','avro_schema').local(out('__avro_record.fields').store('xm').local(out('classifiedAs').has('__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')