我当前正在迭代一个数组,其中每个索引包含两个节点和一个关系(Part_1 -> Part_2),并且我使用 Neo4jTemplate.save() 方法将其保存到数据库中。但是,某些索引具有与其他节点有关系的重复节点(Part_2 -> Part_3)。目前,我的版本每次都会创建一个新的节点和关系,而不是在节点已存在时进行合并。
我读了这个post https://stackoverflow.com/questions/31297127/sdn-4-how-to-cause-sdn-4-to-use-merge-rather-than-create,但我不明白如何实现它,以便两个相同的节点具有相同的 ID。我当前的代码工作原理如下:
- 创建两个节点
- 建立他们的关系
- 添加与节点的关系
- 使用 Neo4jTemplate.save() 保存它
我需要将什么更改为 MERGE 而不是 CREATE?我是否需要在坚持之前进行检查,或者是否有办法在坚持 SDN 4 时进行检查?
EDIT:
我决定使用 Neo4jTemplate.query() 方法来编写 Cyper 查询,但是我不知道如何正确创建用于合并多个节点的参数。我可以为一个节点正确创建一条 MERGE 语句,如下所示:
Map params = new HashMap();
Map 节点 = new HashMap();
节点.put(“名称”,“Part_1”);
params.put("props", node_1);
字符串查询 = "MERGE( n1:Part {name:{props}.name} )";
模板.查询(查询,参数);
我的目标是在两个节点上调用 merge,然后再次调用 merge 以在一个语句中创建关系。我的代码现在看起来像这样:
Map params = new HashMap();
List
node1.put("name1", "Part_1");
node2.put("name2", "Part_2");
地图 = Arrays.asList(node_1, node_2)
params.put("props", 地图);
字符串查询 = "MERGE( n1:Part {name:{props}.name1} )
合并( n2:部分 {name:{props}.name2 )
合并(n1)-[:创建]->(n2)";
模板.查询(查询,参数);
All the examples http://neo4j.com/docs/stable/tutorials-cypher-parameters-java.html到目前为止,我已经看到参数中的多个节点只是在调用时迭代整个过程。我还没有找到任何带有参数的示例,您可以在其中指定您所引用的某个节点。如何创建引用某个节点的参数?提前致谢!