首页 > 解决方案 > 获取从一个 StartNode 传出的具有属性的所有节点和关系

问题描述

我是 GraphDatabase 领域的新手,也是编写 Cypher 语句的新手。

我有一个项目,我想将接线图信息存储在图形数据库(Neo4J)中。有不同类型的节点,例如 fe WiringDiagram [WD] 节点(在许多情况下将是我的起始节点),关于此 WD 节点,所有组件(如保险丝盒、ICU 或传感器)都通过关系链接。插头也可以包含引脚,引脚通过连接线连接。

第一个版本已经存储在 Neo4j 数据库中,请看下图。

图数据库模式 现在我有一个问题,哪种方式最好对这些数据进行后处理。我想要为一个特定的接线图提取数据。因此,如果我说我想要 ID 为 123 的 WiringDiagram 的所有信息,我应该得到所有组件、引脚和连接线。Cypher 在这里应该是什么样子?我希望 C# 数据模型中的数据最好(如果可能的话)。因为之后我想尝试从数据中生成一个 SVG。

正如您在图像中看到的,cypher 语句当前看起来像这样。“MATCH (w:WiringDiagram)<-[r:partOf]-(n)-[*2..]-(l) RETURN * LIMIT 50” 但是有了这个语句,我在 C# 项目中得到了奇怪的结果......

我会很高兴有任何帮助。如果它更适合这种方法,我也愿意继续使用另一种编程语言。很高兴听到任何建议

标签: c#neo4jgraph-databases

解决方案


我找到了一个 APOC 功能,它目前可以做我想做的事情。在搜索到的节点之后获取所有节点,并返回具有关系的完整子组。目前看起来不错。有什么建议如何将这些数据存储回 C# 中的数据模型中?(什么是最好的方法?)

 var result = tx.Run($@"MATCH (p:WiringDiagram {{wiringid:1}})
                        CALL apoc.path.subgraphAll(p, {{
                             relationshipFilter: 
                             ""partOf|has_pin|connectedWith"",
                             filterStartNode:false,
                             minLevel: 0,
                             maxLevel: 10
                            }})
                          YIELD nodes, relationships
                         RETURN nodes, relationships;");

之后我有两个列表,一个包含所有节点,一个包含所有与 start/endnode id 的关系

在此处输入图像描述


推荐阅读