我正在使用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
(:
特定的人
A
不知道哪些编程语言?
看起来你几乎得到了答案:
g.V().hasLabel("B").
filter(__.not_(__.in_('abEdge').has("A","uid",uid))).
toList()
当只使用单个Traversal
参数时,我更喜欢filter()
,但我认为如果您喜欢,可以用where()
替换。