TinkerPop: фильтр по краю, не связанный с краем - PullRequest
0 голосов
/ 30 апреля 2018

Пример базы данных: TinkerPop Modern


Цель : Найти людей, которые не разработали Программное обеспечение.

т. Тип вершины "Персона", который напрямую не связан с типом вершины "Программное обеспечение"

Лицо, подключенное к программному обеспечению [Работы]

g.V().hasLabel("Person").as("from")
.project("title", "node")
    .by(select("from").unfold().values("name").fold())
    .by(select("from").unfold().label().fold())

Найти человека, не подключенного к программному обеспечению [Не работает]

g.V().hasLabel("Person").as("from")
.filter(both().not(hasLabel("Software")))
.project("title", "node")
    .by(select("from").unfold().values("name").fold())
    .by(select("from").unfold().label().fold())

Я считаю, что игнорирование ребра, которое не удовлетворяет условию, но не пропускает вершину.

Пытался сделать цикл, но не нашел пример для этого.

Эквивалент Cypher Query (только для справки): MATCH (n: People) WHERE NOT (n) - (: Software) RETURN n


Пример базы данных:

enter image description here

1 Ответ

0 голосов
/ 05 мая 2018

Я считаю, что вам просто нужно изменить критерии фильтра:

gremlin> g.V().hasLabel('person').
......1>   filter(__.not(outE('created'))).
......2>   project("title", "node").
......3>     by('name').
......4>     by(label)
==>[title:vadas,node:person]

Как вы можете видеть, вам также не нужно возвращаться к этому шагу as() по любой причине - у вас уже есть эта вершина в качестве текущего обходчика в project().

...