Neo4j图数据库高级应用系列 / 服务器扩展指南 APOC - apoc.periodic.iterate()过程在4.0版本中的重大变化

41 篇文章 24 订阅
34 篇文章 3 订阅

作者:维韦克 萨兰(Vivek Saran)

适用版本:Neo4j 4.0 / 4.1

标签:APOC

 

在Neo4j 3.5中,可以在一个事务中获取实体(节点、关系、路径)并安全地在另一个事务中重用。

然而在4.0中,这些实体将拥有返回它们的事务的引用。

对于任何创建新事务的APOC调用中,这会带来问题,例如 apoc.periodic.iterate(以及另外2个)。 从驱动查询(driving)声明中提出的任何实体都必须在任务查询(action)声明中重新绑定

这意味着我们基本上需要重新绑定源自不同事务的实体。

Rebinding意味着,做一个这样的查询:MATCH (n) WHERE id(n) = id(myknownnode)

 

例如,以下语句在3.5.x中完全没有问题:

CALL apoc.periodic.iterate('MATCH (:Account)-[r:ASSOCIATED_WITH]->() RETURN r',
    'CALL apoc.do.case(.....) YIELD value RETURN value',
     {batchSize: 10000, parallel: false, iterateList: true});

但是,在4.0.x中,上述声明需要修改为:

CALL apoc.periodic.iterate('MATCH (:Account)-[r:ASSOCIATED_WITH]->() RETURN id(r) as id',
    'MATCH ()-[r]->() WHERE id(r)=id CALL apoc.do.case(.....) YIELD value RETURN value',
    {batchSize: 10000, parallel: false, iterateList: true});

请注意,在第一个(外部驱动陈述)中,我们将RETURN r 更改为RETURN id(r) AS id

在第二个(内部陈述)中,我们在CALL apoc.do.case()之前插入了MATCH ()-[r]->() WHERE id(r)=id

 

对于来自APOC库中其他有用的过程,请参阅APOC用户指南4.0

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值