繁体   English   中英

具有不同标签和关系的不同节点的 Neo4j 子图(如果有)

[英]Neo4j subgraph of different nodes with different labels and relationship if any

我最近开始使用 neo4j 及其查询语言“密码”来处理建筑/计量数据。

我当前的图形数据库由不同的节点组成(具有不同的标签,例如:point、meter、elec、equip ..etc。仅举几例),并且每个节点具有不同的属性(在此上下文中不相关)。

我想做的是获得具有不同标签的不同节点的子图。 例如,我想将所有节点标记为“点”以及标记为“装备”的节点和标记为“米”的节点。 为此,我尝试了以下查询:

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 客户端中显示图形,它将显示我认为您希望通过这样的简单查询看到的输出(对此的许多变体也同样有效)

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 浏览器中运行它并查看表输出,您将看到客户端在创建显示视图时正在简化额外的返回数据(删除空值和重复项)

如果您的目标是最小化和重组返回的数据,最好的方法可能取决于您调用的语言以及您需要/希望它如何格式化,但这里有一个使用 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客户端中的表输出与之前的查询进行比较)

参考文章

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM