hasNot() 无效

hasNot() having no effect

我在 Amazon Neptune 上通过 Jupiter Notebook 使用 gremlin 遍历。
我试图通过标签从特定顶点过滤边,但它似乎不起作用。

一些示例数据:

%%gremlin
g.addV().property(id, 'u0').as('u0').
  addV().property(id, 'u1').as('u1').
  addV().property(id, 'u2').as('u2').
  addV().property(id, 'u3').as('u3').
  addE('freind').
    from('u0').
    to('u1').
  addE('buddy').
    from('u0').
    to('u2').
  addE('foe').
    from('u0').
    to('u3').
  iterate()

我的查询:
(它比这个例子需要的更复杂,但我的实际查询重复了几次,因此我不能简单地使用 has('friend').has('buddy') 因为下一步还有其他标签.)

%%gremlin
g.withSack(1.0f).V('u0')
    .repeat(
        bothE().hasNot('foe')
        .bothV())
    .times(1)
    .path().by().by(label)

输出:

path[v[u0], freind, v[u1]]
path[v[u0], buddy, v[u2]]
path[v[u0], foe, v[u3]]

我有一个用户,我从 (u0) 开始,希望所有用户都是他的朋友、伙伴等,但不是他的敌人。

不幸的是,它没有像预期的那样过滤... 知道我做错了什么吗?

hasNot() 步骤将仅过滤掉具有指定名称的 属性 的元素,在本例中为名为 foe 的 属性。相反,您应该考虑使用 not()hasLabel() 来查找没有特定标签的项目,如下所示:

g.withSack(1.0f).V('u0')
    .repeat(
        bothE().not(hasLabel('foe'))
        .bothV())
    .times(1)
    .path().by().by(label)