APOC官网触发器示例执行后Web页面一直转圈

apoc使用触发器:如apoc官网指导

CREATE (d:Person {name:‘Daniel’})
CREATE (l:Person {name:‘Mary’})
CREATE (t:Person {name:‘Tom’})
CREATE (j:Person {name:‘John’})
CREATE (m:Person {name:‘Michael’})
CREATE (a:Person {name:‘Anne’})
CREATE (l)-[:DAUGHTER_OF]->(d)
CREATE (t)-[:SON_OF]->(d)
CREATE (t)-[:BROTHER]->(j)
CREATE (a)-[:WIFE_OF]->(d)
CREATE (d)-[:SON_OF]->(m) CREATE (j)-[:SON_OF]->(d)

CALL apoc.trigger.add(‘setAllConnectedNodes’,‘UNWIND apoc.trigger.propertiesByKey({assignedNodeProperties},“surname”) as prop
WITH prop.node as n MATCH(n:Person)-[]-(a) //库中不同标签的节点较多,所以较官方手册加了一个Person标签
SET a.surname = n.surname’, {phase:‘after’});

使用如下的set语句构造触发条件 MATCH (d:Person {name:‘Daniel’}) SET d.surname = ‘William’

该语句执行完成后,触发器的功能已经实现了,但是为什么web页面显示一直转圈,虚机和物理机都是这样,超过5min。

apoc.trigger.enabled=true已经设置过了,而且这之后继续使用MATCH (d:Person {name:‘Daniel’}) SET d.surname = ‘Xaaa’这样的语句不起作用,person的surname是之前的William没有变成Xaaa,为什么?

按F12后发现,一直在向后台发送请求,引发数据库后台进程阻塞。个人推测为'setAllConnectedNodes'这样的触发器,在节点上添加surname属性时,它会添加到所有的连接的节点(但是添加之后又会循环触发,导致走进了一个死循环。

解决方法:
要注意的是,这样的情况会引发数据库后台进程阻塞,需要后台重启neo4j实例,来阻止对应的阻塞进程。前端刷新并不生效。仅仅在前端刷新,会阻塞对Person标签类对象的一切操作,包括delete与set。

//修改相应的触发器语句,此时成功执行,不再阻塞,但是在前端显示不会说Set 6 //properties。仅仅显示Set 1 property,因为其他5个节点的属性是后台触发完成的。

CALL apoc.trigger.add('setAllConnectedNodes','UNWIND apoc.trigger.propertiesByKey({assignedNodeProperties},"surname") as prop
WITH prop.node as n
MATCH(n:Person)-[]-(a:Person)
where not exists(a.surname) or n.surname<>a.surname
SET a.surname = n.surname', {phase:'after'});

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值