我目前正在迭代一个数组,其中每个索引包含两个节点和一个关系(Part_1 -> Part_2),并且我正在使用 Neo4jTemplate.save() 方法将其保存到数据库中。但是,某些索引具有重复的节点,这些节点将与其他节点有关系(Part_2 -> Part_3)。我的版本目前每次都会创建一个新节点和关系,而不是在节点已经存在时合并。
我读了这篇文章,但我不明白如何实现它,以便两个相同的节点具有相同的 ID。我当前的代码是这样工作的:
- 创建两个节点
- 建立他们的关系
- 向节点添加 relashionship
- 使用 Neo4jTemplate.save() 持久化它
我需要将什么更改为 MERGE 而不是 CREATE?我是否需要在坚持之前进行检查,或者是否有办法在坚持 SDN 4 时进行检查?
编辑:
我决定使用 Neo4jTemplate.query() 方法来编写 Cyper 查询,但是我不知道如何正确创建参数以合并多个节点。我可以像这样为一个节点正确创建一个 MERGE 语句:
Map<String, Object> 参数 = new HashMap<String, Object>();
Map<String, Object> 节点 = new HashMap<String, Object>();node.put("name", "Part_1");
params.put("道具", node_1);
字符串查询 = "MERGE(n1:Part {name:{props}.name})";模板.查询(查询,参数);
我的目标是在两个节点上调用合并,然后再次调用合并以在一个语句中创建关系。我的代码现在看起来像这样:
Map<String, Object> 参数 = new HashMap<String, Object>();
List<Map<String, Object>> 地图;
Map<String, Object> node1 = new HashMap<String, Object>();
Map<String, Object> node2 = new HashMap<String, Object>();node1.put("name1", "Part_1");
node2.put("name2", "Part_2");
地图 = Arrays.asList(node_1, node_2)params.put("道具", 地图);
字符串查询=“合并(n1:Part {name:{props}.name1})
MERGE(n2:Part {name:{props}.name2)
MERGE(n1)-[:CREATED]->(n2)”;模板.查询(查询,参数);
到目前为止,我在参数中看到的所有示例都带有多个节点,只是在调用时迭代整个事物。我还没有找到任何具有参数的示例,您可以在其中指定您所指的某个节点。如何创建引用某个节点的参数?提前致谢!