如何解决具有不同标签和关系的不同节点的Neo4j子图
我最近开始使用neo4j及其查询语言“ cypher”来处理建筑物/计量数据。
我当前的图形数据库由不同的节点组成(具有不同的标签,例如:point,meter,elec,equip..etc等),并且每个节点具有不同的属性(在此上下文中不相关)。 / p>
我想做的是获取具有不同标签的不同节点的子图。例如,我想获得所有标记为“点”的节点以及标记为“设备”的节点和标记为“仪表”的节点。为此,我尝试了以下查询:
MATCH (p:point)
MATCH (e:equip)
MATCH (m:meter)
RETURN p,e,m
但是,由于以下原因,该方法不起作用:此查询在断开连接的模式之间建立笛卡尔积。
我正在尝试获取这些信息,以便如果将标记为“点”的节点连接到“设备”或“仪表”节点,我将获得关系。如果没有任何东西连接到“点”节点,则它将是独立的。因此,我可以创建一个带有“点”到“仪表” /“设备”连接的子图,并直观地识别孤立的“点”。
我也尝试过类似的事情:
MATCH (p:point)--(e:equip)
RETURN p,e
但是,这仅返回稍微连接到“设备”节点的“点”节点。也没有给我标记为“点”的孤立节点。
期待您对此的意见(我想是简单的情况)。
最好!
解决方法
以下查询将返回每个point
节点,以及与其所有相关的equip
节点的列表,以及与其所有相关的meter
节点的另一个列表。
MATCH (p:point)
RETURN p,[(p)--(e:equip) | e] AS es,[(p)--(m:meter) | m] AS ms
,
对于此特定子集示例:
MATCH (p:point)--(e:equip)
RETURN p,e
如果要在Neo4j Client中显示图形,它将显示我想用一个简单的查询看到的输出(对此也可以有很多变化)
MATCH (a:ACTOR),(m:MOVIE)
OPTIONAL MATCH p=(a)--(m)
return a,m,relationships(p)
翻译成您的数据集,是这样吗?
MATCH (p:point),(e:equip)
OPTIONAL MATCH t=(p)--(e)
return p,e,relationships(t)
在neo4j浏览器中运行此命令,并查看表输出,您会看到客户端在创建显示视图(删除null和重复项)时正在简化额外的返回数据
如果您的目标是最小化和重组返回的数据,则最好的方法可能取决于您使用的是哪种语言,以及您需要/希望如何格式化,但这是使用neo4j浏览器/桌面客户端的快速示例查询,可能会给您一些想法,并帮助您重组密码查询返回的内容。
MATCH (a:ACTOR),(m:MOVIE)
OPTIONAL MATCH t=(a:ACTOR)--(m:MOVIE)
with collect(distinct a) + collect(distinct m) + collect(relationships(t)) as output
return output
翻译成您的数据集,是这样吗?
MATCH (p:point),(e:equip)
OPTIONAL MATCH t=(p:point)--(e:equip)
with collect(distinct p) + collect(distinct e) + collect(relationships(t)) as output
return output
(将neo4j客户端中的表输出与上一个查询进行比较)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。