作者:维韦克 萨兰(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。

本文探讨了在Neo4j4.0中如何处理实体重绑定问题,特别是针对APOC库中的apoc.periodic.iterate过程。在3.5到4.0版本升级后,实体引用的变化要求开发者在不同事务间使用实体时进行额外的操作。
948

被折叠的 条评论
为什么被折叠?



