当我使用以下查询时:
MATCH (emp:Employee)
WHERE emp.supervisor_id = 159
RETURN emp
Run Code Online (Sandbox Code Playgroud)
我得到了4个员工/节点的结果 supervisor_id = 159
对于此查询,我还得到一个结果,即1名员工employeeID = 159:
MATCH (emp:Employee)
WHERE emp.employeeID = 159
RETURN emp
Run Code Online (Sandbox Code Playgroud)
但是当我使用=运算符时,它确实会返回(no changes, no records).
MATCH (emp:Employee)
WHERE emp.employeeID = emp.supervisor_id
RETURN emp
Run Code Online (Sandbox Code Playgroud)
我认为这是一个逻辑错误,但我无法弄明白.
任何想法请.
在您的查询中,您正在搜索Employee具有其属性employeeID等于的标签的节点supervisor_id.
或者根据我的理解,你想要的是用标签搜索两个不同的节点Employee.
所以你的查询应该是这个:
MATCH (emp1:Employee), (emp2:Employee)
WHERE emp1.employeeID = emp2.supervisor_id
CREATE (emp1)-[:MANAGER_OF]->(emp2)
Run Code Online (Sandbox Code Playgroud)
此查询创建了一个笛卡尔积,因此如果您有很多Employee节点,则应该使用以下APOC过程批量创建与过程(https://neo4j-contrib.github.io/neo4j-apoc-procedures/)的关系 :
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}
);
Run Code Online (Sandbox Code Playgroud)
干杯