gpt4 book ai didi

MERGE 与来自单个节点的 3+ 关系

转载 作者:行者123 更新时间:2023-12-04 02:10:23 26 4
gpt4 key购买 nike

我正在寻找一种方法来为 MERGE 创建(或者如果存在,找到匹配的模式)从单个节点产生 3 个或更多关系。

我知道如何查找/创建与单个节点相关的 2 个节点,例如:

MERGE (f1:Friend)
MERGE (f2:Friend)
MERGE (w2)<-[:HAS_FRIEND]-(p:Person)-[:HAS_FRIEND]->(w1)
ON CREATE {do something}
ON MATCH SET {do something else}

我知道如果将它们添加到最右侧或最左侧的节点,您可以继续创建/查找更多节点,例如

MERGE (friend1)<-[:HAS_FRIEND]-(p:Person)-[:HAS_FRIEND]->(friend2)-[:HAS_PET]->(pet:Pet)-[:HAS_TOY]->(toy:Toy)

但是如何MERGE(查找整个模式是否存在或如果未找到则创建它)类似 3 个 :Friend 节点来自单个 :Person节点

3 nodes related to 1 node

最佳答案

不完全确定我是否遵循,但您正在寻找这样的东西吗?给定一个 friend 列表和我合并每个Person/Friend模式,然后将它们之间的关系合并为`[:FRIEND]。

with ['dave','mary','derek'] as friends
merge (me:Person {name: 'me'})
with me, friends
unwind friends as friend
merge (f:Friend {name: friend})
merge (me)-[:FRIEND]->(f)
return *

如果你有一段相反的友谊,并且你不想第二次在另一个方向建立新的关系,你可以用这样的东西来防止这种情况。假设我们将的好 friend rich引入等式,但rich实际上是另一个方向的 friend 。

merge (me:Person {name: 'me'})
merge (rich:Friend {name: 'rich'})
merge (me)<-[:FRIEND]-(rich)
return *

然后,如果我们将 rich 添加到我们尝试合并的列表中,但在每个 :Friend 之后添加一个步骤如果它已经存在于另一个方向,则合并以防止创建一个。

with ['dave','mary','derek','rich'] as friends
merge (me:Person {name: 'me'})
with me, friends
unwind friends as friend
merge (f:Friend {name: friend})
with me, f
match (f)
where not (me)<-[:FRIEND]-(f)
merge (me)-[:FRIEND]->(f)
return *

match (f) where not (me)<-[:FRIEND]-(f)防范merging关系,如果它已经存在,尽管在另一个方向。

它阻止了这种情况的发生

friends with bi-directional FRIEND relationship

关于MERGE 与来自单个节点的 3+ 关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39157462/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com