我目前刚接触neo4j并使用cypher查询来完成手头的任务。我在Java中使用neo4j bolt驱动程序 这是我想要实现的目标。我有类似下面的数据作为Java ArrayList(存储在HashMap中):
雇主2:[employeeId 1,employeeId 2,employeeId3,...]
这基本上显示了雇主与雇员之间的关系(这些是雇主2的雇员)
现在,我需要找到这些员工和他们。图表中的雇主(他们可能已经或可能不存在)并创建"(x:雇主) - [雇佣] - >(y:员工)" 之间的关系它们。
我能想到的一种方式(也许是天真的)是每次都搜索雇主和雇员,并为每个人分别创建一个CREATE查询。
match (employer:Employer{name:"John"}), (name:Employee{name:"Snow"}) CREATE (employer)-[pr:EMPLOYES]->(employee)
但我觉得不必多次搜索同一个Employer节点。由于时间对我来说是一个重要的标准,我正在寻找一种更好的方法(如果存在)
作为neo4j的新手,我能想到的是,一次搜索雇主ID,然后使用该结果运行多个查询,每次都搜索员工ID。但我无法找到正确的查询来执行此操作。此外,这是正确的方法吗?我需要从Java准备这个查询。我应该多次查询还是发送一个查询?
答案 0 :(得分:1)
下面的查询类似于@Lju中的查询。但是,它有一些改进。
MERGE
的{{1}}只需要执行一次,因此它应该在Employer
之前。否则,将为每个UNWIND
完成。Employee
和$employerName
。$names
子句之间的WITH
子句只是向前传递所有标识符,因此不需要。 (但是,Cypher语法确实需要MERGE
和WITH
之间的MERGE
子句。查询:
UNWIND