如何从 Gremlin 中的特定顶点找到没有特定边的顶点?

How do I find vertices without particular edges from a particular vertex in Gremlin?

我正在使用 python 到 运行 我的 gremlin 查询,对此我仍在习惯/学习。假设我有顶点标签 AB,并且可以有一条从 AB 的边称为 abEdge。我可以从 特定的 A 顶点找到具有这样边的 B 顶点:

g.V()\
    .hasLabel("A")\
    .has("uid", uid)\  # uid is from a variable
    .outE("abEdge")\
    .inV()\
    .toList()

但是我如何从 特定的 A 顶点找到没有这样的边的 B 顶点?

我的直觉是尝试以下方法:

# Find B edges without an incoming edge from a particular A vertex
gremlin.V()\
    .hasLabel("B")\
    .where(__.not_(inE("abEdge").from_(
        V()\
        .hasLabel("A")\
        .has("uid", uid)
    )))\
    .next()

这会导致查询错误 (还不确定在哪里),我仍在阅读 Gremlin,但我也处于时间限制之下,所以我在这里问.如果有人可以提供帮助,但只使用 groovy 语法也很好,因为在两者之间转换还不错。

任何解释都会有所帮助,因为我仍在学习这项技术。

更新

我想这是否是一个现实生活中的问题,并且与该网站有关。我们可以问 (A=PersonB=Programming-LanguageabEdge=knows):

Which programming languages does particular person A not know?

看来你差不多有了答案:

g.V().hasLabel("B"). \
  filter(__.not_(__.in_('abEdge').has("A","uid",uid))). \
  toList()

当只使用一个 Traversal 参数时,我更喜欢 filter(),但如果您愿意,我认为您可以替换为 where()