首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >具有不同标签和关系的不同节点的Neo4j子图(如果有的话)

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

Stack Overflow用户
提问于 2020-09-11 11:50:02
回答 3查看 192关注 0票数 0

我最近开始使用neo4j和它的查询语言"cypher“来处理构建/计量数据。

我当前的图形数据库由不同的节点组成(有不同的标签,如:点、表、电、设备..etc )。仅举几个例子,每个属性都有不同的属性(与此上下文无关)。

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

代码语言:javascript
运行
复制
MATCH (p:point)
MATCH (e:equip)
MATCH (m:meter)
RETURN p, e, m

但是,这不起作用,因为:这个查询在断开连接的模式之间构建了一个笛卡儿产品.

我试图得到这些,以便,如果一个节点标记为“点”连接到一个“装备”或“米”节点,我将得到关系。如果没有任何东西连接到“点”节点,那么它将是独立的。因此,我可以有一个子图与“点”到“米”/“装备”连接和视觉识别孤立的“点”。

我也尝试过这样的方法:

代码语言:javascript
运行
复制
MATCH (p:point)--(e:equip)
RETURN p,e

但这只返回“点”节点,这些节点在某种程度上连接到“设备”节点。也没有给出标记为"point“的孤立节点。

期待您对此的投入(我猜是一个简单的案例)。

最好的!

EN

回答 3

Stack Overflow用户

发布于 2020-09-11 17:54:21

下面的查询将返回每个point节点,以及其所有相关equip节点的列表,以及其所有相关meter节点的另一个列表。

代码语言:javascript
运行
复制
MATCH (p:point)
RETURN p, [(p)--(e:equip) | e] AS es, [(p)--(m:meter) | m] AS ms
票数 0
EN

Stack Overflow用户

发布于 2020-09-11 18:41:35

对于这个特定的子集示例:

代码语言:javascript
运行
复制
MATCH (p:point)--(e:equip)
RETURN p,e

如果您在Neo4j客户端中显示一个图形,它将显示输出,我认为您希望看到这样一个简单的查询(这上面的许多变体也同样有效)

代码语言:javascript
运行
复制
MATCH (a:ACTOR), (m:MOVIE)
OPTIONAL MATCH p=(a)--(m)
return a, m, relationships(p)

翻译到你的数据集,像这样吗?

代码语言:javascript
运行
复制
MATCH (p:point), (e:equip)
OPTIONAL MATCH t=(p)--(e)
return p, e, relationships(t)

在neo4j浏览器中运行它并查看表输出,您将看到客户机在创建显示视图(删除空值和重复项)时正在简化额外的返回数据。

如果您的目标是最小化和重构返回的数据,那么最好的方法可能取决于您从哪种语言调用,以及您需要/希望如何对其进行格式化,但是下面是一个使用neo4j浏览器/桌面客户机的快速示例查询,它可能为您提供一些想法并帮助您重新构造密码查询的内容。

代码语言:javascript
运行
复制
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

翻译到你的数据集,像这样吗?

代码语言:javascript
运行
复制
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客户端中的表输出与前面的查询进行比较)

参考文章

票数 0
EN

Stack Overflow用户

发布于 2022-04-28 22:11:05

代码语言:javascript
运行
复制
match (n) where n:point or n:equip or n:meter  return n

解释一下。为了避免创建笛卡儿产品,您只需进行一次匹配。使用where条件,您可以选择标有“点”或“设备”的模式。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63846507

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档