2

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

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

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

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

# 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=Person, B=Programming-Language, 和abEdge=knows):

特定的人 A不知道哪些编程语言?

4

1 回答 1

2

看起来你几乎得到了答案:

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

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

于 2020-03-17T11:25:39.880 回答