Я использую в своем приложении Neo4j (версия 3.4.1) и Spring-data-neo4j (5.0.10.RELEASE). Я тоже использую OGM.
У меня есть следующие отношения между моими узлами:
Я хочу найти все узлы на каждом пути от узла A до узла F (в порядке обхода)
Например: для пути A -> B -> F мне нужны узлы A, B, F (в этом порядке)
Для пути A -> C -> D -> F мне нужны узлы A, C, D, F (в этом порядке) и т. Д.
Я хочу захватить узлы, пройденные на каждом пути отдельно.
Шифровальный запрос, который я придумал, выглядит следующим образом:
@Query("MATCH p=((u:User{name:{nameOne}})-[:RELATED*1..3]-(v:User{name:{nameTwo}})) RETURN p")
List<User> getRelationBetweenUsers(@Param("nameOne") String nameOne, @Param("nameTwo") String nameTwo);
Я также попытался использовать List<List<User>>
в качестве возвращаемого типа, чтобы получить узлы на каждом пути в виде отдельного списка, как показано ниже.
@Query("MATCH p=((u:User{name:{nameOne}})-[:RELATED*1..3]-(v:User{name:{nameTwo}})) RETURN p")
List<List<User>> getRelationBetweenUsers(@Param("nameOne") String nameOne, @Param("nameTwo") String nameTwo);
Однако это возвращает все узлы, пройденные по нескольким путям вместе, тогда как я хочу их по каждому пути.
i.e result is List <A,B,C,D,F> where as what I want is
List<List<A,B,F>, List<A,C,D,F>, List<A,D,F>>.
Надеюсь, вы уловили идею.
Может ли кто-нибудь дать несколько указателей / предложений о том, как я могу достичь ожидаемых результатов.
С уважением, Варун
A,B,C,D,F
не является допустимым путем, учитывая отношения на вашем рисунке. Кроме того, результатом является список списков (узлов), но вы говорите, что получаете только список узлов. Правильно ли обрабатываете результат? - person cybersam   schedule 09.01.2019MATCH
запрос так, чтобы в шаблоне взаимосвязи была стрелка, указывающая направление (например,-[:RELATED*1..3]->
). - person cybersam   schedule 10.01.2019