neo4j - Neo4j Cypher - 分别并按顺序获取多条路径上的节点
问题描述
我在我的应用程序中使用 Neo4j(版本 3.4.1)和 Spring-data-neo4j(5.0.10.RELEASE)。我也在使用OGM。
我的节点之间有以下关系:
我想找到从节点A到节点F的每条路径中的所有节点(按遍历顺序)
例如:对于路径 A-->B-->FI 想要节点 A、B、F(按此顺序)
对于路径 A-->C-->D-->FI 需要节点 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>>.
希望你能明白。
任何人都可以就我如何实现预期结果提供一些指示/建议。
问候, 瓦伦
解决方案
我能够找到自己问题的答案。我从另一个 SO 答案中得到了提示。 弹簧数据 | 新4J | 以正确的顺序查询路径
这就是我为获得预期结果所做的事情
@Query("MATCH p=((u:User{name:{nameOne}})-[:RELATED*1..3]-(v:User{name:{nameTwo}})) RETURN nodes(p) as users")
org.neo4j.ogm.model.Result getRelationBetweenUsers(@Param("nameOne") String nameOne, @Param("nameTwo") String nameTwo);
在我调用上述方法的服务类中,我有以下实现:
List<List<User>> usersOnDifferentPaths = new ArrayList<>();
Iterable<Map<String, Object>> queryResults = userRepository.getRelationBetweenUsers(nameOne, nameTwo).queryResults();
queryResults.forEach(queryResult -> {
List<User> usersOnSinglePath = (List<User>) queryResult.get("users");
usersOnDifferentPaths.add(usersOnSinglePath);
});
希望有人觉得它有帮助。
PS:注意我故意跳过查询中的关系,因为我只对获取节点感兴趣。
问候,
五
推荐阅读
- swift - Element 的 Swift 通用集合无法转换为 Any 的集合
- angular - 如何实现 Angular 中的图标更改场景?
- ios - 我的应用仅在 iOS 13+ 上的 Testflight 中崩溃
- reactjs - 如何在文本字段中按回车键时停止反应引导/@material ui 在 url 中插入获取参数
- javascript - Onload 和 onmouseout 事件的 Javascript 错误
- ios - Objective-C 如何从其他地方将对象添加到 NSMutableArray?
- javascript - 反应按钮 OnHover 更改数组内的图像
- c# - 在 ASP .Net 的一个 zip 文件夹中下载多个 csv 文件
- sql - Flink Create View 或 Table as Select
- angular - 每次按下添加购物车按钮时,我都会尝试在产品模板上显示产品数量