考虑两个实体x和y具有多对一关系。这是x的一个实例恰好与y的一个实例有关。
此外,需要在多个用户更新关系的并发场景中强制执行此约束。
为了强制执行此关系,neo4j不允许我们对实体x和y之间允许的关系数量进行约束。
为了使用cypher以编程方式强制执行关系约束,我们删除旧关系并创建新关系,如下所示。
match (x:x)-[r:relates_to]->(y:y)
delete r
delete y
create (x)-[newr:relates_to]->(newy:y)
使用cypher事务性http端点执行上述cypher查询。
使用SoapUI我们模拟并发请求,预期结果为:
但实际结果不同,并发更新会导致数据不一致,实体x的一个实例与实体y的多个实例相关。
什么可能导致不一致的关系,cypher查询是否需要调整。
环境:
答案 0 :(得分:1)
旧版本曾经有过这样的功能:
CREATE UNIQUE (x)-[newr:relates_to]->(newy:y)
我相信新版本已被
取代OPTIONAL match (x:x)-[r:relates_to]->(y:y)
create (x)-[newr:relates_to]->(newy:y)