返回更改后的(由apoc.trigger)版本的节点而不是原始节点

Returning the altered (by apoc.trigger) version of node instead of the original

我正在使用 python 螺栓驱动程序在 neo4j 数据库中创建节点。这些节点被 apoc.trigger 函数改变。我希望 returning BoltStatementResult 包含这些节点的更改版本。

这是我目前测试过的:

  1. 我的触发器按预期工作。存储的节点已正确更改。
  2. 我尝试了 'before' 和 'after' 阶段。
  3. 我将触发器功能设置为 return 更改后的版本。
  4. 我确实写了第二个查询来获取数据库的新节点和更新节点。但是这个选项很不安全,因为它没有唯一标识符。

我的触发函数:

CALL apoc.trigger.add(
    'onCreateNodeAddMetadata',
    'UNWIND {createdNodes} AS n
     SET n.uid = apoc.create.uuid(), n.timestamp = timestamp() RETURN n',
    {phase: 'before'}
)

我希望 session.write_transaction 的 returning 值包含添加的属性。

作为一种安全的解决方法(但请参阅下面的警告),您 write_transaction 中的 Cypher 查询可以 return 已创建节点的本机 ID(例如,RETURN ID(n))。

那么,只要你知道这个节点没有被删除,你就可以用那个ID(在在本例中,myID 包含 ID 值并作为 parameter):

传递
MATCH (n) WHERE ID(n) = $myId
...

如果节点可以在您通过本机 ID 搜索之前删除,那么这种技术是不安全的,因为 neo4j 可以将已删除节点的本机 ID 重新分配给另一个新创建的节点节点.