在 Gremlin 中找到子树差异

Find the subtree difference in Gremlin

我在 gremlify 上描述了这里的图表。所以我有四种类型的顶点:ContentUserGroup视频ContentGroup作为容器,UserVideo 是叶子。此外,我在 GroupUserGroup内容视频User 也可以直接分配给 VideoContentVideo 可以添加到 Content 顶点。当 ContentGroup 中删除时,我必须计算树的差异。我创建了一个从 Content 遍历的查询,聚合所有直接分配的 Users,然后减去那些 Users来自 成员集:

g.V().has('ContentId', 1).in('Assigned').
  choose(label()).
  option('User', __.aggregate('DirectAssign')).
  option('Group', __.out('Added').where(without('DirectAssign')).
      as('ToDrop'))
      .select('ToDrop')

但是,也有一些缺点:

所以我的问题是:是否可以在没有 choose 步骤的情况下重写此查询(保持单一)?

如果我了解您的用例,您可以通过遍历内容找到这些用户。因此您可以避免 aggregatechoose 步骤。

g.V().hasLabel('Content').
    as('content').
  in('Assigned').hasLabel('Group').out('Added').
  not(where(out('Assigned').
        as('content')))

示例:https://gremlify.com/ozhf4t0xv4j