Neo4j upsert与可能新的边缘类型



我正在尝试在neo4j中创建upsert逻辑。我需要插入两个节点,并将这两个节点与一个关系连接起来。

如果存在一个共享3个特定属性的关系,e1_id,e2_idmodel,那么我需要用新数据和可能的新类型完全覆盖该关系。

例如,我试过:

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,这样即使没有边缘也能工作。

最新更新