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

时间:2017-10-05 10:37:12

标签: neo4j cypher

当我使用以下查询时:

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

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

任何想法请。

1 个答案:

答案 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}
);

干杯