返回更改后的(由apoc.trigger)版本的节点而不是原始节点
Returning the altered (by apoc.trigger) version of node instead of the original
我正在使用 python 螺栓驱动程序在 neo4j 数据库中创建节点。这些节点被 apoc.trigger
函数改变。我希望 returning BoltStatementResult
包含这些节点的更改版本。
这是我目前测试过的:
- 我的触发器按预期工作。存储的节点已正确更改。
- 我尝试了 'before' 和 'after' 阶段。
- 我将触发器功能设置为 return 更改后的版本。
- 我确实写了第二个查询来获取数据库的新节点和更新节点。但是这个选项很不安全,因为它没有唯一标识符。
我的触发函数:
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 重新分配给另一个新创建的节点节点.
我正在使用 python 螺栓驱动程序在 neo4j 数据库中创建节点。这些节点被 apoc.trigger
函数改变。我希望 returning BoltStatementResult
包含这些节点的更改版本。
这是我目前测试过的:
- 我的触发器按预期工作。存储的节点已正确更改。
- 我尝试了 'before' 和 'after' 阶段。
- 我将触发器功能设置为 return 更改后的版本。
- 我确实写了第二个查询来获取数据库的新节点和更新节点。但是这个选项很不安全,因为它没有唯一标识符。
我的触发函数:
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 重新分配给另一个新创建的节点节点.