Python 3.x 返回节点的更改(通过apoc.trigger)版本,而不是原始版本
我正在使用python bolt驱动程序在neo4j数据库中创建节点。这些节点通过Python 3.x 返回节点的更改(通过apoc.trigger)版本,而不是原始版本,python-3.x,neo4j,cypher,neo4j-apoc,neo4j-driver,Python 3.x,Neo4j,Cypher,Neo4j Apoc,Neo4j Driver,我正在使用python bolt驱动程序在neo4j数据库中创建节点。这些节点通过apoc.trigger功能进行更改。我希望返回的BoltStatementResult包含这些节点的修改版本 这是我迄今为止所测试的: 我的触发器按预期工作。已正确更改存储的节点 我尝试了“之前”和“之后”阶段 我将触发器函数设置为返回修改过的版本 我确实编写了第二个查询来获取数据库的新节点和更新节点。但是这个选项非常不安全,因为它没有唯一的标识符 我的触发功能: CALL apoc.trigger.add(
apoc.trigger
功能进行更改。我希望返回的BoltStatementResult
包含这些节点的修改版本
这是我迄今为止所测试的:
CALL apoc.trigger.add(
'onCreateNodeAddMetadata',
'UNWIND {createdNodes} AS n
SET n.uid = apoc.create.uuid(), n.timestamp = timestamp() RETURN n',
{phase: 'before'}
)
我希望我的会话.write_事务的返回值包含添加的属性。作为一种安全的解决方法(但请参见下面的警告),您的write_事务中的Cypher查询可以返回所创建节点的本机ID(例如,返回ID(n)
)
然后,只要您知道节点未被删除,就可以使用该ID对其执行查询(在本例中,myID
包含ID值,并作为ID值传递):
如果在通过本机ID搜索节点之前可以删除该节点,那么这种技术是不安全的,因为neo4j可以将已删除节点的本机ID重新分配给另一个新创建的节点。我试图绕过内部ID。但因为我不打算实现删除触发器。我认为这是目前的发展方向。谢谢
MATCH (n) WHERE ID(n) = $myId
...