我想使用 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
请帮助我,我想提取所有 4 个节点标签:用户、资源、视频和课程
这取决于您提取“所有 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 *