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=1739499987-B1Fz699FbyVws7EtqhZKgoRhGcxwUpbF-0-c295c9a8f17b4263525b3ff18b5eea36)
上述指令首先匹配节点类型为Person、属性为{name: "Tom Hanks"}的节点,然后匹配这些节点中具有关系[:ACTED_IN],并且此关系指向某个电影节点的节点。返回结果如图2-60所示。
![](https://epubservercos.yuewen.com/84FE89/26581284601284906/epubprivate/OEBPS/Images/Figure-P81_84333.jpg?sign=1739499987-eCWrSGTUM5eLTcCCGvHdEsqWbCADhmG9-0-e6890a786399f2cb5f98d2dae1256949)
图2-60 Tom Hanks参演过的电影
通过结果可以看到演员Tom Hanks参演过的所有电影。
【程序2-9】查找谁导演了电影“Cloud Atlas”
![](https://epubservercos.yuewen.com/84FE89/26581284601284906/epubprivate/OEBPS/Images/Figure-P81_101350.jpg?sign=1739499987-SsjnnXuK9xzfJjt48GF07PAg9aYWKnIq-0-cea5e5ba8d832453f1f863ed5b8d7b74)
上面指令首先匹配属性为{title: "Cloud Atlas"}的节点,然后匹配这些节点中具有关系[:DIRECTED]并且是被某个节点指向的节点,再返回匹配节点的name属性。返回结果如图2-61所示。
![](https://epubservercos.yuewen.com/84FE89/26581284601284906/epubprivate/OEBPS/Images/Figure-P82_84354.jpg?sign=1739499987-FrNq69hPL9GaM4WKW01CIto0ziw7xFDO-0-913048371bd33e7be4665327d00bbec3)
图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=1739499987-N13uSDtg9INTgtFCD4zatWXFpm1Dz34N-0-a836afec3fcfef6b3016bf3e197a13a1)
上面指令首先匹配节点类型为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=1739499987-HSnIyxPIOHvOXdJZZ592rmUOP2Av0JM1-0-649493427b0eb90a87285c7ca461c4fd)
图2-62 与Tom Hanks出演过同一部电影的人
这样就查出了与Tom Hanks出演过同一部电影的人的姓名。
【程序2-11】查找与电影“Cloud Atlas”相关的所有人
![](https://epubservercos.yuewen.com/84FE89/26581284601284906/epubprivate/OEBPS/Images/Figure-P82_84393.jpg?sign=1739499987-wGcBpooOT0aXxkzeAz2jpHzADG6rtRLb-0-9576151af1bcc9fbc53764ef9275fe20)
上面指令首先匹配节点类型为Person的节点,然后匹配节点类型为Movie、节点属性为{title:"Cloud Atlas"}的节点,最后匹配两者之间存在某种关系(无论是导演还是演员关系)的情况,然后将人名、电影的关系类型、电影的关系同时返回。返回结果如图2-63所示。
![](https://epubservercos.yuewen.com/84FE89/26581284601284906/epubprivate/OEBPS/Images/Figure-P83_84404.jpg?sign=1739499987-reMKoTNa4VFz6xHURX33Z0FdwPBFZaQJ-0-863cc0d4dd16d8c5996361a96c0a763c)
图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=1739499987-PwaH6HezQbEk8ku36enSu4EaRKWJcpWI-0-3053f012f5a58fca886a644d00d31d90)
上面指令首先匹配节点类型为Person、属性为{name: " Kevin Bacon "}的节点,然后将关系深度限制为从1到4再进行遍历,最后返回匹配的所有节点。返回结果如图2-64所示。
![](https://epubservercos.yuewen.com/84FE89/26581284601284906/epubprivate/OEBPS/Images/Figure-P83_84428.jpg?sign=1739499987-KqLGNek9y3UhLLu0S60Y9P7TOfiyKXJH-0-e005183fcd03f34fa9ee1172a2244ea7)
图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=1739499987-Zp0vrsl0FhK2RP1haIMGY54fq0gwEAVm-0-b5f729a0e23f8dd9ffcd1f96628257f0)
上面指令首先匹配节点类型为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=1739499987-MDdGR4AN1o01TIvo7M8pkNb19TxD17Op-0-666bd23737252093818c41013b71bef6)
图2-65 “Kevin Bacon”与“Meg Ryan”之间的最短关系路径
通过结果可以看到演员Meg Ryan与Tom Hanks同参演过Joe Versus the Volcano电影,而Tom Hanks与Kevin Bacon同参演过Apollo 13电影,这就是他们两者之间的最短关系路径。