我正在尝试批量更新两组节点之间的关系列表。
在这个过程中,一些关系将被删除,一些将被保留,而另一些将被创建。
这是一个示例数据结构(左表示之前,右表示之后)
要在一个查询中实现这一点,这是我找到的算法
1. MATCH (f:Foo)-[r]-(Bar) WHERE id(f)=1
2. SET r.delete = true
3. UNWIND [2, 3, 4] as $node_id
4. MERGE (f)-[r2]-(b:Bar) WHERE id(b)=$node_id
5. SET r2.delete = false
6. MATCH (Foo)-[r3:{delete: true}]-()
7. DELETE r3
有没有更简单/有效的方法来做到这一点?(我需要在一次传递中从单个Foo节点中为多个关系执行此操作,这会导致一些非常庞大的查询)。我在apoc库中搜索了这个函数,但没有找到一个函数来做这个。
1条答案
按热度按时间ttcibm8c1#
您不需要伪
delete
属性。假设您将f
的本地ID和所需Bar
节点的ID列表作为parameters$fId
和$barIds
传递,您可以执行以下操作:注意,关系的
MERGE
需要一个关系类型,所以我随意使用了X
作为类型。