我从 Neo4j (v2.1.5) 开始,但在使用以下 Cypher 查询时遇到问题:
MATCH (actor:Person{name:"Tom Cruise"})-[role:ACTED_IN]->(movies)<-[r:ACTED_IN]-(coactors)
WITH coactors, count(coactors) as TimesCoacted
RETURN coactors.name, avg(TimesCoacted)
ORDER BY avg(TimesCoacted) DESC
它是基于Neo4j安装时附带的迷你电影图。
一切正常,它显示了所有与汤姆·克鲁斯合作电影的合作 Actor 以及他们合作了多少次,但是当我想要时就会出现问题列出他们合作过的电影。将“movies”变量放在 RETURN 语句中会引发以下错误:
movies not defined (line 3, column 9)
"RETURN movies, coactors.name, avg(TimesCoacted)"
^
有什么办法可以在一个查询中完成它吗?
最佳答案
尝试以下操作:
MATCH
(actor:Person{name:"Tom Cruise"})-[role:ACTED_IN]->(movies)<-[r:ACTED_IN]-(coactors)
WITH
coactors,
count(coactors) as TimesCoacted,
movies // You have declare "movies" here in order to use it later in the query
RETURN
movies,
coactors.name,
avg(TimesCoacted)
ORDER BY
avg(TimesCoacted) DESC
您在 WITH
语句中定义的内容是唯一可用于进一步处理的内容。在最初的问题中,movies
没有进入下一部分(它不是 WITH
的一部分),因此无法使用 movies
在返回语句中。
编辑:在 OP 更新后添加了以下内容。
另一个例子。如果您想计算 Actor 在电影中合作的次数并列出电影标题。请尝试以下操作:
MATCH
(actor:Person {name:"Tom Cruise"})-[:ACTED_IN]->(movie)<-[:ACTED_IN]-(coactor:Person)
WITH
actor,
coactor,
collect (distinct movie.title) as movieTitles
RETURN
actor.name as actorName,
coactor.name as coactorName,
movieTitles,
size(movieTitles) as numberOfMovies
关于neo4j - 在 Neo4j Cypher 的 RETURN 语句中使用WITH语句之前的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27903842/