как найти отношения между друзьями 2-й степени с данными весны neo4j - PullRequest
0 голосов
/ 03 мая 2018

график моих отношений, как показано ниже
Использование MATCH (n:Person {name:'1'})-[]-()-[r]-(m) RETURN m,r вернет "4" и "5", но не может получить связь между "4" и "5" , на самом деле, "4" следуют за "5", "r" просто представляют друзья 4 (4 -> 2) и 5 ​​(5 -> 3).
Весной данные neo4j
domain.java

@NodeEntity(label = "Person")
public class PersonTest {
@Id
private Long id;
@Property(name = "name")
private String name;
@Relationship(type = "Follow")  //direction=Relationship.DIRECTION
private List<PersonTest> friends;

Repository.java

public interface PersonRepository extends Neo4jRepository<PersonTest,Long> {
    @Query("MATCH (n:Person {name:{name}})-[]-()-[r]-(m) RETURN m,r")
    Collection<PersonTest> graph(@Param("name") String name);
}

Service.java

 Collection<PersonTest> persons = personRepository.graph(name);
 Iterator<PersonTest> result = persons.iterator();
 while (result.hasNext()) {
      for (PersonTest friend : p.getFriends()) {
           //........here will get 2 and 3!
      }
 }

Как решить эту проблему? Получить связь между "4" и "5".

1 Ответ

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

Чтобы найти родственных детей на определенном уровне, вы можете использовать двусторонний шаблон переменной длины:

MATCH (n:Person {name:'1'})-[:Follow*2]->(m)-[r:Follow]-()<-[:Follow*2]-(n) 
RETURN m,r

http://console.neo4j.org/r/el2x80

Обновление . Я думаю, что это более правильный запрос:

MATCH (n:Person {name:'1'})-[:Follow*2]->(m:Person)-[r:Follow]-(k:Person) 
WHERE (n)-[:Follow*2]->(k) 
RETURN m, r

http://console.neo4j.org/r/bv2u8k

...