我最近开始使用neo4j和它的查询语言"cypher“来处理构建/计量数据。
我当前的图形数据库由不同的节点组成(有不同的标签,如:点、表、电、设备..etc )。仅举几个例子,每个属性都有不同的属性(与此上下文无关)。
我想做的是,得到一个有不同标签的不同节点的子图。例如,我想得到所有的节点标记为“点”,以及标记为“装备”和那些标记为“米”。为此,我尝试了以下查询:
MATCH (p:point)
MATCH (e:equip)
MATCH (m:meter)
RETURN p, e, m
但是,这不起作用,因为:这个查询在断开连接的模式之间构建了一个笛卡儿产品.
我试图得到这些,以便,如果一个节点标记为“点”连接到一个“装备”或“米”节点,我将得到关系。如果没有任何东西连接到“点”节点,那么它将是独立的。因此,我可以有一个子图与“点”到“米”/“装备”连接和视觉识别孤立的“点”。
我也尝试过这样的方法:
MATCH (p:point)--(e:equip)
RETURN p,e
但这只返回“点”节点,这些节点在某种程度上连接到“设备”节点。也没有给出标记为"point“的孤立节点。
期待您对此的投入(我猜是一个简单的案例)。
最好的!
发布于 2020-09-11 09:54:21
下面的查询将返回每个point
节点,以及其所有相关equip
节点的列表,以及其所有相关meter
节点的另一个列表。
MATCH (p:point)
RETURN p, [(p)--(e:equip) | e] AS es, [(p)--(m:meter) | m] AS ms
发布于 2020-09-11 10:41:35
对于这个特定的子集示例:
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客户端中的表输出与前面的查询进行比较)
发布于 2022-04-28 14:11:05
match (n) where n:point or n:equip or n:meter return n
解释一下。为了避免创建笛卡儿产品,您只需进行一次匹配。使用where条件,您可以选择标有“点”或“设备”的模式。
https://stackoverflow.com/questions/63846507
复制