使用 Cypher 查询提取子图

问题描述 投票:0回答:1

我想使用 Cypher 来提取这个子图(下图)。

子图结构:

User -- WATCHED --> Resource
Resource -- CONTAINS --> Video
Course -- HAS_RESOURCE --> Resource

我用来提取

User
Resource
Video
的代码。现在我不知道如何提取
Course
更多。

MATCH (u:User)-[w:WATCHED]->(r:Resource)-[:CONTAINS]->(v:Video)
RETURN * LIMIT 50

Example subgraph

请帮助我,我想提取所有 4 个节点标签:用户、资源、视频和课程

neo4j cypher
1个回答
0
投票

这取决于您提取“所有 4 个节点标签”的含义。

如果您只想要带有这些标签的所有节点,您可以这样做:

MATCH (n:User|Resource|Video|Course)
RETURN n

如果您希望子图结构中显示所有元组(因此不包括具有未如图所示连接的标签的节点),您可以使用

UNION
将三种类型的元组映射到相同的三列:

MATCH (source:User)-[rel:WATCHED]->(target:Resource)
RETURN *
UNION
MATCH (source:Resource)-[rel:CONTAINS]->(target:Video)
RETURN *
UNION
MATCH (source:Course)-[rel:HAS_RESOURCE]->(target:Resource)
RETURN *

如果您希望所有用户观看过某个资源,以及连接到这些资源的任何视频或课程,您可以使用

OPTIONAL MATCH
:

MATCH (u:User)-[w:WATCHED]->(r:Resource)
OPTIONAL MATCH (r)-[cn:CONTAINS]->(v:Video)
OPTIONAL MATCH (r)<-[h:HAS_RESOURCE]-(cr:Course)
RETURN *

如果您只想让用户观看包含视频的资源,并且该资源是课程的一部分,那么您可以使用图表模式

MATCH (u:User)-[w:WATCHED]->(r:Resource),
      (r)-[cn:CONTAINS]->(v:Video),
      (r)<-[h:HAS_RESOURCE]-(cr:Course)
RETURN *
© www.soinside.com 2019 - 2024. All rights reserved.