簡體   English   中英

如何在Cypher / Neo4j中使用WHERE子句

[英]How to use WHERE Clause in Cypher/Neo4j

我已經在Neo4j上建立了這個數據庫

在此處輸入圖片說明

我正在尋找在基努·里維斯(Keanu Reeves)也參演過的電影中扮演過的演員。 我的代碼是:

MATCH (a:Actor)-[r:ACTS_IN]->(m:Movie)
WHERE (m:Movie)<-[r:ACTS_IN]-(:Actor { name:"Keanu Reeves" })
RETURN a.name

但這是行不通的。 我是這種語言的新手,甚至不確定是否應該使用WHERE或WITH或其他方式。

您的查詢在MATCHWHERE子句中使用相同的標識符r 這意味着2個ACTS_IN關系應該是相同的。 因此, a永遠是Keanu Reeves的節點。

這種查詢形式應返回所有相關的參與者(包括Keanu),但性能可能不高:

MATCH (a:Actor)-[r:ACTS_IN]->(m:Movie)
WHERE (m)<-[:ACTS_IN]-(:Actor { name:"Keanu Reeves" })
RETURN DISTINCT a.name;

此查詢應該更快(並從結果中消除Keanu),尤其是如果您首先在:Actor(name)上創建索引:

MATCH (a:Actor)-[:ACTS_IN]->(:Movie)<-[:ACTS_IN]-(:Actor { name:"Keanu Reeves" })
RETURN DISTINCT a.name;

首先:找到基努扮演的電影清單。

第二: WITH基努(Keanu)合作,每部電影都會在那些不是基努的電影中找到其他演員。

第三:返回基努的同事的不同名單,他在電影名單中與他一起工作

match (k:Actor {name: 'Keanu Reeves'})-[r:ACTS_IN]->(m:Movie)
with k,m
match (m)<-[:ACTS_IN]-(colleague:Actor)
where colleague <>  k
return distinct(colleague)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM