在相同集合的不同属性上使用equals返回没有记录,为什么?

k.v*_*ent 2 neo4j cypher

当我使用以下查询时:

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)

我认为这是一个逻辑错误,但我无法弄明白.

任何想法请.

log*_*ima 5

在您的查询中,您正在搜索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)

干杯