0
我試圖在給定的neo4j測試數據集中找到'朋友的朋友'級別推薦, ,我想出了這兩個查詢,並且我無法識別第二個查詢中的錯誤,因爲它包含一個額外的節點 - '8'(Emil Eifrem)。 請幫我理解其中的差異。由於neo4j Cypher查詢說明結果
1)
MATCH (keanu:Person {name:"Keanu Reeves"})-[:ACTED_IN]->()<-[:ACTED_IN]-(f),
(f)-[:ACTED_IN]->()<-[:ACTED_IN]-(fof)
WHERE NOT (keanu)-[:ACTED_IN]->()<-[:ACTED_IN]-(fof) AND fof <> keanu
RETURN fof;
VS
2)
MATCH (keanu:Person {name:"Keanu Reeves"})-[:ACTED_IN]->(movie)<-[:ACTED_IN]-(f),
(f)-[:ACTED_IN]->(f_movies)<-[:ACTED_IN]-(fof)
WHERE NOT (movie)<-[:ACTED_IN]-(fof) AND fof <> keanu
RETURN fof;
版本:Neo4j 2.1.2 – user3865770
我沒有樣本數據在我面前。 Emil和Keanu都有一些電影嗎?你的WHERE條款之間的一個區別是,第一個不包括任何與Keanu一起作用於任何事物的「foaf」,而第二個不包括任何只用Keanu在電影中扮演的「foaf」。 (如果'(電影)'有多個結果,那麼'foaf'的_one_將第二個查詢中的條件傳遞給結果就足夠了:或者換句話說,演員可以匹配'foaf'幾次,只有不符合條件的情況才被排除。) – jjaderberg