我正在尝试在neo4j中创建upsert逻辑。我需要插入两个节点,并将这两个节点与一个关系连接起来。
如果存在一个共享3个特定属性的关系,e1_id
,e2_id
和model
,那么我需要用新数据和可能的新类型完全覆盖该关系。
例如,我试过:
MERGE (snapchat:ORG{name:'ORG_snapchat'})
MERGE (xbox:ORG{name:'ORG_xbox'})
MERGE (xbox)-[edge:{e1_id:'111', e2_id:'222', model:'TEST'}]->(snapchat)
ON CREATE
SET edge:OPPO{e1_id:'111', e2_id:'222', url:'test.com', date:'2022-09-09', model:'TEST', context:'THIS IS A TEST'}
ON MATCH
SET edge:OPPO{e1_id:'111', e2_id:'222', url:'test.com', date:'2022-09-09', model:'TEST', context:'THIS IS A TEST'};
但是,这产生:
Invalid input '{': expected an identifier (line 4, column 20 (offset: 150))
"MERGE (xbox)-[edge:{e1_id:'222_xbox_test', e2_id:'111_snapchat_test', model:'TEST'}]->(snapchat)"
因为它希望我在它合并之前指定一个边的类型。我不知道该怎么办。
我应该写一个查询,删除任何匹配的边,然后创建一个新的边吗?
感谢您的帮助。
Edge只有一种类型。当您使用MERGE创建它时,您必须定义它。因此,
我应该只是写一个查询删除任何匹配的边,然后创造新的优势?
是,如果你可以简单地删除一条现有的边,那么是。这样做。确保使用OPTIONAL MATCH
,这样即使没有边缘也能工作。