如何将计数(变量)设置为节点的 属性

How to set a count(variable) as a property of a node

我目前正在尝试获取每个演员出演过的所有电影的数量(neo4j 示例电影数据库),然后将其设置为人物节点的 num_movies_acted 属性。

到目前为止,我能够获得所有演员的列表以及他们各自的电影数量(包括是否因为可选匹配而为 0)

这是我的:

MATCH (p:Person)
OPTIONAL MATCH (p)-[:ACTED_IN]->(m:Movie)
RETURN p.name as name, count(m) as num_movies_acted

然后如何将其设置到个人节点中?我知道我应该使用类似的东西:

SET p.num_movies_acted = count(m),但这没用。

Invalid use of aggregating function count(...) in this context (line 3, column 26 (offset: 84))
"SET p.num_movies_acted = count(m)"

编辑:这行得通吗?

MATCH (p:Person)
OPTIONAL MATCH (p)-[:ACTED_IN]->(m:Movie)
WITH p, count(m) as num_movies_acted
SET p.num_movies_acted = num_movies_acted
RETURN p

因为我首先将计数(m)“存储”到一个变量中

MATCH (p:Person) OPTIONAL MATCH (p)-[:ACTED_IN]->(m:Movie) RETURN p.name as name, count(m) as num_movies_acted

此查询 returns 作为 num_movies_acted 的列表,当您尝试将其设置为单个节点的 属性 时,它无法工作。

EDIT: Would this work?

MATCH (p:Person) OPTIONAL MATCH (p)-[:ACTED_IN]->(m:Movie) WITH p, count(m) as num_movies_acted SET p.num_movies_acted = num_movies_acted RETURN p

是的,当您计算每个 Person 节点的 Movie 节点并设置 属性.

时,这会很好地工作

您也可以试试:

MATCH (p:Person)
OPTIONAL MATCH (p)-[r:ACTED_IN]->(m:Movie)
WITH p, count(r) as num_movies_acted
SET p.num_movies_acted = num_movies_acted
RETURN p