如何限制 Neo4j 中两个节点之间只有一种关系?

Ser*_*iel 8 neo4j cypher

我有以下图表:

图表

目前我正在使用此查询来添加两个节点之间的关系:

MATCH (a:Service),(b:Service)
WHERE a.service_id = 'cs2322' and b.service_id = 'ab3232'
CREATE (a)-[r:DEPENDENT_ON]->(b)
RETURN type(r)
Run Code Online (Sandbox Code Playgroud)

然而,我不想在任何两个节点之间有多个关系,因为我想可视化我的服务以及它们之间的依赖关系,所以我不能让一个服务两次依赖另一个节点。

如果我尝试在两个节点之间创建关系(这两个节点已经在每个方向上相互建立关系),有什么方法可以限制这一点,以强制 Neo4j 服务器抛出错误?

cyb*_*sam 5

如果您创建重复关系,则没有内置方法可以引发错误。但这也是执行此类政策的一种相当昂贵的方式。

相反,您可以使用MERGECREATE避免创建重复关系。

例如,此查询仅在DEPENDENT_ON关系尚不存在时才创建;否则,它只会将现有关系绑定到r

    MATCH (a:Service), (b:Service)
    WHERE a.service_id = 'cs2322' AND b.service_id = 'ab3232'
    MERGE (a)-[r:DEPENDENT_ON]->(b)
    RETURN TYPE(r)
Run Code Online (Sandbox Code Playgroud)