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

pod7payv  于 2022-11-05  发布在  其他
关注(0)|答案(3)|浏览(179)

我最近开始使用neo4j和它的查询语言“cypher”来处理建筑/计量数据。
我当前的图形数据库由不同的节点组成(具有不同的标签,例如:点、 Jmeter 、电、装备等,仅举几个例子),并且每一个具有不同的属性(在该上下文中不相关)。
我想做的是得到一个由不同节点组成的子图,这些节点有不同的标签。例如,我想得到所有标签为“point”的节点,以及标签为“equipment”和“meter”的节点。为此,我尝试了以下查询:

MATCH (p:point)
MATCH (e:equip)
MATCH (m:meter)
RETURN p, e, m

然而,这不起作用,因为:此查询在断开的模式之间构建笛卡尔积。
我试图得到这些,这样,如果一个标记为“点”的节点连接到一个“装备”或“ Jmeter ”节点,我将得到关系。如果没有任何东西连接到“点”节点,它将只是独立的。因此,我可以有一个子图与“点”到“ Jmeter ”/“装备”的连接,并在视觉上识别孤立的“点”。
我也试过类似的方法:

MATCH (p:point)--(e:equip)
RETURN p,e

但这只返回了与“装备”节点有一定联系的“点”节点,而没有给出标记为“点”的孤立节点。
期待着你对此的投入(我猜是简单的情况)。
最好的!

yizd12fk

yizd12fk1#

以下查询将返回每个point节点,沿着与之相关的所有equip节点的列表和与之相关的所有meter节点的列表。

MATCH (p:point)
RETURN p, [(p)--(e:equip) | e] AS es, [(p)--(m:meter) | m] AS ms
c6ubokkw

c6ubokkw2#

对于此特定子集示例:

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客户端中的表输出与前面的查询进行比较)
Reference article

mgdq6dx1

mgdq6dx13#

match (n) where n:point or n:equip or n:meter  return n

说明。为了避免创建笛卡尔积,您需要进行一次匹配。使用where条件,您可以选择带有标签“点”或“装备”的模式。

相关问题