1

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

这是我到目前为止测试过的:

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

我的触发功能:

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

我希望 my 的返回值session.write_transaction包含添加的属性。

4

1 回答 1

1

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

然后,只要您知道该节点未被删除,您就可以使用该 ID 对其执行查询(在此示例中,myID包含 ID 值并作为参数传递):

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

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

于 2019-10-30T21:26:21.213 回答