使用 apoc.periodic.iterate 在 Neo4j 数据库中添加新关系
Adding New Relationships in Neo4j Database using apoc.periodic.iterate
我有一个包含两种节点的 Neo4j 数据库 - 作者和文章。有些文章有不止一位作者。我试图在共同撰写一篇文章的作者之间建立一种无向关系。我当前的非功能性查询是这样的:
CALL apoc.periodic.iterate(
"MATCH (a:Author) WHERE (a)-[:WROTE]->()<-[:WROTE]-(b:Author) RETURN a,b",
"WITH {a} AS a, {b} as b CREATE (a)-[r:COAUTHOR]-(b)", {batchSize:10000, parallel:true})
我收到以下错误:
Failed to invoke procedure apoc.periodic.iterate
: Caused by: org.neo4j.exceptions.SyntaxException: PatternExpressions are not allowed to introduce new variables: 'b'. (line 1, column 60 (offset: 59))
"EXPLAIN MATCH (a:Author) WHERE (a)-[:WROTE]->()<-[:WROTE]-(b:Author) RETURN a,b"
我可以看出问题是我在第一个 MATCH 状态中尝试做的太多,但我是 Cypher 的新手并且无法分解它。
非常感谢,
约翰
问题源于你的第一句话:
MATCH (a:Author)
WHERE (a)-[:WROTE]->()<-[:WROTE]-(b:Author)
RETURN a,b
Cypher 不允许在查询的 WHERE
部分引入新变量,因此您的 (b:Author)
将不被允许,因为它位于 WHERE
子句中。
要修复,请将 (b:Author)
移至 MATCH
语句。此外,如果您在 WHERE
子句上找到模式,您应该使用 exists()
函数以便 return 一个布尔值。
MATCH (a:Author), (b:Author)
WHERE exists((a)-[:WROTE]->()<-[:WROTE]-(b))
RETURN a, b
我有一个包含两种节点的 Neo4j 数据库 - 作者和文章。有些文章有不止一位作者。我试图在共同撰写一篇文章的作者之间建立一种无向关系。我当前的非功能性查询是这样的:
CALL apoc.periodic.iterate(
"MATCH (a:Author) WHERE (a)-[:WROTE]->()<-[:WROTE]-(b:Author) RETURN a,b",
"WITH {a} AS a, {b} as b CREATE (a)-[r:COAUTHOR]-(b)", {batchSize:10000, parallel:true})
我收到以下错误:
Failed to invoke procedure
apoc.periodic.iterate
: Caused by: org.neo4j.exceptions.SyntaxException: PatternExpressions are not allowed to introduce new variables: 'b'. (line 1, column 60 (offset: 59)) "EXPLAIN MATCH (a:Author) WHERE (a)-[:WROTE]->()<-[:WROTE]-(b:Author) RETURN a,b"
我可以看出问题是我在第一个 MATCH 状态中尝试做的太多,但我是 Cypher 的新手并且无法分解它。
非常感谢, 约翰
问题源于你的第一句话:
MATCH (a:Author)
WHERE (a)-[:WROTE]->()<-[:WROTE]-(b:Author)
RETURN a,b
Cypher 不允许在查询的 WHERE
部分引入新变量,因此您的 (b:Author)
将不被允许,因为它位于 WHERE
子句中。
要修复,请将 (b:Author)
移至 MATCH
语句。此外,如果您在 WHERE
子句上找到模式,您应该使用 exists()
函数以便 return 一个布尔值。
MATCH (a:Author), (b:Author)
WHERE exists((a)-[:WROTE]->()<-[:WROTE]-(b))
RETURN a, b