Neo4j 在节点上执行基于时间的操作
如何在neo4j中的特定时间后触发要在节点上执行的操作(将属性设置为something)Neo4j 在节点上执行基于时间的操作,neo4j,Neo4j,如何在neo4j中的特定时间后触发要在节点上执行的操作(将属性设置为something) 我知道,但它只在时间结束时删除节点或关系,这不是我想要的?您可以结合使用和过程。例如,首先添加触发器: CALL apoc.trigger.add('doVertexTask', ' UNWIND {deletedRelationships} AS dRel WITH dRel WHERE type(dRel) = "taskRelation" WITH endNode(
我知道,但它只在时间结束时删除节点或关系,这不是我想要的?您可以结合使用和过程。例如,首先添加触发器:
CALL apoc.trigger.add('doVertexTask', '
UNWIND {deletedRelationships} AS dRel
WITH dRel WHERE type(dRel) = "taskRelation"
WITH endNode(dRel) AS vertexNode WHERE "Vertex" IN labels(vertexNode)
SET vertexNode.prop = rand()
RETURN true',
{phase: "before"})
然后添加数据和任务:
MERGE (A:Vertex {id: 1})
CREATE (T:TASK)
CREATE (T)-[:taskRelation]->(A)
WITH A, T
CALL apoc.date.expireIn(T, 10, 's')
RETURN A, T
您需要
apoc.periodic.schedule
过程:我认为apoc.periodic.schedule将多次运行该语句,对吗?我希望该语句在任务每秒钟运行一次时运行一次,检查所需时间的开始时间,如果它已到达:启动查询并删除任务(apoc.periodic.cancel
)。您还可以使用apoc.date.expire
和apoc.trigger
procedures.apoc.periodic.cancel-可能我有10000个(或更多)节点需要在不同的时间段后失效,性能问题如何?我尝试过,但没有属性(SET vertexNode.prop=rand()
)10秒后在节点A:Vertex
上设置。它对我有效。检查apoc.trigger和apoc.date.expireIn的所有必要配置设置(neo4.conf)。当我启用这些过程时,它最终使用apoc.trigger.add
和apoc.date.expireIn
的组合工作。谢谢,但还有一件事,我不明白这行作为dRel展开{deletedRelationships}。我原以为:taskRelation
关系将被删除,但它没有被删除,因为当我匹配
关系时,即使设置了道具
,它仍会显示连接的:Task
和:Vertex
节点。这也是我需要的,但我只是想了解是什么触发了该操作。@Emmanuel这很奇怪,因为必须删除过期的节点。尝试查看日志-如果有任何错误消息。是的,没错,过期的节点已被删除。现在我明白了。