hasNot() не имеет никакого эффекта

Я использую обходы гремлинов через ноутбук Jupiter на Amazon Neptune.
Я пытаюсь отфильтровать ребра из определенной вершины по их метке, но, похоже, это не работает.

некоторые примерные данные:

      %%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), и мне нужны все пользователи, которые являются его друзьями, приятелями и т. д., но не его врагами.

к сожалению, он не фильтрует, как предполагалось ... есть идеи, что я делаю неправильно?

1 ответ

The hasNot()шаг будет отфильтровывать только те элементы, которые имеют свойство с указанным именем, в данном случае свойство с именем foe. Вместо этого вы должны посмотреть на использование not()с hasLabel()чтобы найти элементы, у которых нет определенной метки, как показано здесь:

      g.withSack(1.0f).V('u0')
    .repeat(
        bothE().not(hasLabel('foe'))
        .bothV())
    .times(1)
    .path().by().by(label)  
Другие вопросы по тегам