![精通Neo4j](https://wfqqreader-1252317822.image.myqcloud.com/cover/113/47216113/b_47216113.jpg)
2.4.3 查询关系
接下来讲解MATCH指令更多的用法。
2.4.3.1 查找演员参演的电影
【程序2-8】查找“Tom Hanks”参演过的电影的名称
![](https://epubservercos.yuewen.com/84FE89/26581284601284906/epubprivate/OEBPS/Images/Figure-P81_101349.jpg?sign=1739933364-djovbZuykl20pEp8xdT26EGEFHyxXlzR-0-0d50d97087a0047741910da8fcbae955)
上述指令首先匹配节点类型为Person、属性为{name: "Tom Hanks"}的节点,然后匹配这些节点中具有关系[:ACTED_IN],并且此关系指向某个电影节点的节点。返回结果如图2-60所示。
![](https://epubservercos.yuewen.com/84FE89/26581284601284906/epubprivate/OEBPS/Images/Figure-P81_84333.jpg?sign=1739933364-SnpJNvjuKmvuVfyreB19SdiRxGQbpne7-0-f9e3947e5ced7a16838b93267c2c77eb)
图2-60 Tom Hanks参演过的电影
通过结果可以看到演员Tom Hanks参演过的所有电影。
【程序2-9】查找谁导演了电影“Cloud Atlas”
![](https://epubservercos.yuewen.com/84FE89/26581284601284906/epubprivate/OEBPS/Images/Figure-P81_101350.jpg?sign=1739933364-YCBR3NdhHMyzqeMAGQX6dAU3yInkXdrp-0-c9c6ae8ceec2a0b967da63fbbb6e55ba)
上面指令首先匹配属性为{title: "Cloud Atlas"}的节点,然后匹配这些节点中具有关系[:DIRECTED]并且是被某个节点指向的节点,再返回匹配节点的name属性。返回结果如图2-61所示。
![](https://epubservercos.yuewen.com/84FE89/26581284601284906/epubprivate/OEBPS/Images/Figure-P82_84354.jpg?sign=1739933364-l4BWOKaclN3KH9dx3Xt0Ug8zIxTcPxuV-0-f7673407df0c81868c4553d65faf4833)
图2-61 电影Cloud Atlas的导演名单
通过结果可以看到Lily Wachowski、Lana Wachowski、Tom Tykwer导演了电影Cloud Atlas。
【程序2-10】查找与Tom Hanks同出演过电影的人
![](https://epubservercos.yuewen.com/84FE89/26581284601284906/epubprivate/OEBPS/Images/Figure-P82_101352.jpg?sign=1739933364-aHMPnOkpmF5pY4MXjOT0t3gCqNqZXuPJ-0-ac3973c8aafeac1befb3bb098dee5019)
上面指令首先匹配节点类型为Person、属性为{name:"Tom Hanks"}的节点,然后匹配这些节点中通过[:ACTED_IN]关系指向的节点m,并且同时匹配某个节点coActors也通过[:ACTED_IN]关系指向的节点m,然后返回匹配节点m的name属性。返回结果如图2-62所示。
![](https://epubservercos.yuewen.com/84FE89/26581284601284906/epubprivate/OEBPS/Images/Figure-P82_84377.jpg?sign=1739933364-EYjmKMhrZHujKaBIIWQ0fGLf8STxtP2M-0-64f072c59f5a35c6abf294d7efd4f1bf)
图2-62 与Tom Hanks出演过同一部电影的人
这样就查出了与Tom Hanks出演过同一部电影的人的姓名。
【程序2-11】查找与电影“Cloud Atlas”相关的所有人
![](https://epubservercos.yuewen.com/84FE89/26581284601284906/epubprivate/OEBPS/Images/Figure-P82_84393.jpg?sign=1739933364-qZFwkdJ0UdQszUOw22X6uZbPTTLTRaPe-0-07326802e01f909bb675aa934465bd3d)
上面指令首先匹配节点类型为Person的节点,然后匹配节点类型为Movie、节点属性为{title:"Cloud Atlas"}的节点,最后匹配两者之间存在某种关系(无论是导演还是演员关系)的情况,然后将人名、电影的关系类型、电影的关系同时返回。返回结果如图2-63所示。
![](https://epubservercos.yuewen.com/84FE89/26581284601284906/epubprivate/OEBPS/Images/Figure-P83_84404.jpg?sign=1739933364-HTmAbK8N5uqXM2H0O3COhMzi77XeZtir-0-674046286f82d3a0698357259d480a4e)
图2-63 与电影“Cloud Atlas”相关的所有人
通过结果可以看到返回了三列数据,这与RETURN语句后面的people.name、Type(relatedTo)、relatedTo相对应。
2.4.3.2 查询关系路径
你或许听说过“六度空间”理论,也就是说,世界上任何两个人,他们之间最多通过6条关系路径就可以相互联系到彼此。使用Neo4j的关系路径查询,可以查找任意深度的关系路径,也就很轻松地能够实现人脉关系查询了。
【程序2-12】查找与演员Kevin Bacon存在4条及以内关系路径的任何演员和电影
![](https://epubservercos.yuewen.com/84FE89/26581284601284906/epubprivate/OEBPS/Images/Figure-P83_101353.jpg?sign=1739933364-KY6ZorGplerxZSSxLblzWQwG7iO2mdJZ-0-115b714c1bc2185f09e7f293cf885e30)
上面指令首先匹配节点类型为Person、属性为{name: " Kevin Bacon "}的节点,然后将关系深度限制为从1到4再进行遍历,最后返回匹配的所有节点。返回结果如图2-64所示。
![](https://epubservercos.yuewen.com/84FE89/26581284601284906/epubprivate/OEBPS/Images/Figure-P83_84428.jpg?sign=1739933364-UxAnblO9gyqoPAsSUhimeZ5IQ4ujIPpN-0-fd7fa616c62d910705fb8b25b91290b7)
图2-64 与演员Kevin Bacon存在4条及以内关系的演员和电影
通过结果可以看到演员Kevin Bacon的4度关系以内的演员和电影网络是很庞大的。
【程序2-13】查找与演员Kevin Bacon与Meg Ryan之间的最短关系路径
![](https://epubservercos.yuewen.com/84FE89/26581284601284906/epubprivate/OEBPS/Images/Figure-P84_101354.jpg?sign=1739933364-iizn1RVaimmDSdlvjOkZYcwrGpThSNU8-0-1bb35029a5a2eba9b81aa36a3992be24)
上面指令首先匹配节点类型为Person、属性为{name: "Kevin Bacon"}的节点,再匹配节点类型为Person、属性为{name: "Meg Ryan"}的节点,两者用[*]关系操作符相连,代表两者存在任意深度的关系,然后使用shortestPath方法返回两者在所有深度关系遍历路径中最短的一条。返回结果如图2-65所示。
![](https://epubservercos.yuewen.com/84FE89/26581284601284906/epubprivate/OEBPS/Images/Figure-P84_84460.jpg?sign=1739933364-ElFtNqaDoCybRa7F0r2ZlkuKHTx32415-0-33d6843e0c96e70047b5f6ad5781b493)
图2-65 “Kevin Bacon”与“Meg Ryan”之间的最短关系路径
通过结果可以看到演员Meg Ryan与Tom Hanks同参演过Joe Versus the Volcano电影,而Tom Hanks与Kevin Bacon同参演过Apollo 13电影,这就是他们两者之间的最短关系路径。