Гремлин получает вершины, где существует двунаправленное ребро, соединяющее их - PullRequest
1 голос
/ 01 ноября 2019

Мой простой сценарий социальной сети, в котором люди заводят друзей и публикуют картинки, и эти картинки должны быть видны людям только в том случае, если между ними существует двусторонняя связь

g.addV("user").property("name","X").as('x').
  addV("user").property("name","Y").as('y').
  addV("post").property("name","p1").as('p1').
  addE("posts").from("x").to("p1").
  addE("friend").from("x").to("y").iterate()

. односторонние отношения между X и Y. Y должен видеть сообщения X только в том случае, если существует корабль двунаправленных отношений, т. е.

g.addE("friend").from(V().has("name","Y")).to(V().has("name","X")).iterate()

, теперь существует двусторонний край одного и того же типа между X и Y, так что обаможете просматривать сообщения друг друга.

мой код, чтобы получать сообщения всех друзей Y, но не работает

g.V("name","Y").both("friend").out("posts").toList().next();

1 Ответ

1 голос
/ 01 ноября 2019

Один из более прямых способов написать это с помощью:

g.V().has("name","Y").as('y').
  out('friend').
  where(__.in('friend').as('y')).
  out('posts').values('name')

Итак, найдите «Y» и обозначьте этот шаг как «y», затем перейдите к друзьям, отфильтруйте любого «друга»вершины, которые не совпадают с "y", используя where(), затем для этих совпадений получают сообщения.

gremlin> g.addV("user").property("name","X").as('x').
......1>   addV("user").property("name","Y").as('y').
......2>   addV("post").property("name","p1").as('p1').
......3>   addE("posts").from("x").to("p1").
......4>   addE("friend").from("x").to("y").iterate()
gremlin> g.V().has("name","Y").as('y').
......1>   out('friend').
......2>   where(__.in('friend').as('y')).
......3>   out('posts').values('name')
gremlin> g.addE("friend").from(V().has("name","Y")).to(V().has("name","X")).iterate()
gremlin> g.V().has("name","Y").as('y').
......1>   out('friend').
......2>   where(__.in('friend').as('y')).
......3>   out('posts').values('name')
==>p1
...