|| apoc.trigger.install - APOC 核心文档 - Neo4j 文档

apoc.trigger.install

详情

语法

apoc.trigger.install(databaseName, name, statement, selector [, config ]) :: (name, query, selector, params, installed, paused)

描述

最终为给定数据库添加一个触发器,该触发器在事务成功时调用。

输入参数

名称

类型

描述

databaseName

STRING

要添加触发器的数据库名称。

name

STRING

要添加的触发器名称。

statement

STRING

触发时运行的查询。

selector

MAP

{ phase = "before" :: ["before", "rollback", "after", "afterAsync"] }

config

MAP

给定 Cypher 语句的参数。默认值为:{}

返回参数

名称

类型

描述

name

STRING

触发器的名称。

query

STRING

属于该触发器的查询。

selector

MAP

{ phase = "before" :: ["before", "rollback", "after", "afterAsync"] }

params

MAP

给定 Cypher 语句的参数。

installed

BOOLEAN

触发器是否已安装。

paused

BOOLEAN

触发器是否已暂停。

启用触发器

默认情况下,触发器是禁用的。我们可以通过在 apoc.conf 中设置以下属性来启用它们:

apoc.conf
apoc.trigger.enabled=true
apoc.trigger.refresh=60000
描述
选项键 描述

apoc.trigger.enabled

true/false,默认 false

启用/禁用此功能

apoc.trigger.refresh

数字,默认 60000

集群中所有节点触发复制检查后的间隔时间(毫秒)

使用示例

apoc.trigger.* 过程旨在系统数据库中执行,因此必须通过打开系统数据库会话来执行。

有几种方法可以实现这一点:

  • 使用 Cypher-shell 或 Neo4j Browser 时,在 Cypher 查询前加上 :use system

  • 使用 Fabric 时,在 Cypher 查询前加上 USE system

  • 使用驱动程序时,直接针对系统数据库打开会话

此外,apoc.trigger 过程的第一个参数接受应安装、更新或删除触发器的数据库名称。

安装、更新或删除触发器是最终一致性操作。因此,它们不会立即添加/更新/删除,而是由 APOC 配置 apoc.trigger.refresh=<MILLISECONDS>(默认 60000 毫秒)处理刷新率。

本节中的示例基于以下在“neo4j”数据库中创建的图:

CREATE (:Counter {count:0})
CREATE (f:Foo);

要创建一个触发器来统计已删除节点的数量,请运行以下查询:

CALL apoc.trigger.install(
  'neo4j',
  'count-removals',
  'MATCH (c:Counter)
   SET c.count = c.count + size([f IN $deletedNodes WHERE id(f) > 0])',
  {}
);
结果
name query selector params installed paused

"count-removals"

MATCH (c:Counter) SET c.count = c.count + size([f IN $deletedNodes WHERE id(f)  0])

{}

{}

TRUE

FALSE

在由配置 apoc.trigger.refresh 定义的时间后,Foo 节点将被删除

MATCH (f:Foo)
DELETE f;
结果
0 rows available after 20 ms, consumed after another 0 ms
Deleted 1 nodes

最后,让我们检查 Counter 节点上的 count 属性是否已递增。

MATCH (c:Counter)
RETURN c.count as count;
结果
count

1

© . This site is unofficial and not affiliated with Neo4j, Inc.