如何从 Gremlin 中的特定顶点找到没有特定边的顶点?
How do I find vertices without particular edges from a particular vertex in Gremlin?
我正在使用 python 到 运行 我的 gremlin 查询,对此我仍在习惯/学习。假设我有顶点标签 A
和 B
,并且可以有一条从 A
到 B
的边称为 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=Person
、B=Programming-Language
和 abEdge=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()
。
我正在使用 python 到 运行 我的 gremlin 查询,对此我仍在习惯/学习。假设我有顶点标签 A
和 B
,并且可以有一条从 A
到 B
的边称为 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=Person
、B=Programming-Language
和 abEdge=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()
。