当我使用以下查询时:
MATCH (emp:Employee)
WHERE emp.supervisor_id = 159
RETURN emp
我得到一个结果为4名员工/节点supervisor_id = 159
并且对于此查询,我还得到一个带有employeeID = 159
的员工的结果:
MATCH (emp:Employee)
WHERE emp.employeeID = 159
RETURN emp
但是当我使用=
运算符时,它会返回(no changes, no records)
。
MATCH (emp:Employee)
WHERE emp.employeeID = emp.supervisor_id
RETURN emp
我认为这是一个逻辑错误,但我无法弄明白。
任何想法请。
答案 0 :(得分:5)
在您的查询中,您正在搜索标签为Employee
且其属性employeeID
等于supervisor_id
的节点。
或者根据我的理解,你想要的是用标签Employee
搜索两个不同的节点。
所以你的查询应该是这个:
MATCH (emp1:Employee), (emp2:Employee)
WHERE emp1.employeeID = emp2.supervisor_id
CREATE (emp1)-[:MANAGER_OF]->(emp2)
此查询创建笛卡尔积,因此如果您有许多Employee
个节点,则应批量创建与APOC
过程(https://neo4j-contrib.github.io/neo4j-apoc-procedures/)的关系,如下所示:< / p>
CALL apoc.periodic.iterate(
"MATCH (emp1:Employee) RETURN emp1",
"MATCH (emp2:Employee) WHERE emp1.employeeID = emp2.supervisor_id CREATE (emp1)-[:MANAGER_OF]->(emp2)",
{batchSize:5000, parallel:true}
);
干杯