apoc.load.directory.async 过程用于管理触发器。每个触发器都包含一个监听器,该监听器观察一个或多个文件夹,这些文件夹将触发自定义 Cypher 查询的执行。以下过程可用于添加、删除和列出触发器
限定名称 | 类型 | 版本 |
---|---|---|
|
|
|
apoc.load.directory.async.remove
|
|
|
apoc.load.directory.async.removeAll
|
|
|
apoc.load.directory.async.list
|
|
|
使用示例
添加文件夹监听器
与其他加载过程(如 apoc.load.csv
或 apoc.load.json
)一起,可以异步加载文件。
此示例使用触发器提供的参数创建节点,仅在 csvFolder 中的文件创建和修改时触发
CALL apoc.load.directory.async.add('csvImport',
"CALL apoc.load.csv($filePath) yield list WITH list CREATE (n:CsvToNode {content: list, fileName: $fileName, fileDirectory: $fileDirectory, listenEventType: $listenEventType})",
"*.csv", "csvFolder" ,{listenEventType: ["CREATE", "MODIFY"]})
其中 $fileName
是创建/修改的文件,$filePath
是文件的相对路径,即 $IMPORT_DIR/csvFolder/[FILENAME.csv]
,$fileDirectory
是目录的相对路径,即 $IMPORT_DIR/csvFolder
,$listenEventType
是触发事件,即 CREATE
或 MODIFY
。
假设我们的 IMPORT_DIR 设置为 import
,并将以下文件上传到 import/csvFolder
文件夹
name,age
Selma,8
Rana,11
Selina,18
然后,执行 MATCH (n:CsvToNode) RETURN properties(n) as props
props |
---|
{ "fileName": "test.csv", "listenEventType": "CREATE", "fileDirectory": "csvFolder", "content": [ "Selma", "8" ] } |
{ "fileName": "test.csv", "listenEventType": "CREATE", "fileDirectory": "csvFolder", "content": [ "Rana", "11" ] } |
{ "fileName": "test.csv", "listenEventType": "CREATE", "fileDirectory": "csvFolder", "content": [ "Selina", "18" ] } |
如果我们修改 test.csv
如下
name,age
Selma,80
Rana,110
Selina,180
我们将获得 3 个新的节点,其属性如下
props |
---|
{ "fileName": "test.csv", "listenEventType": "MODIFY", "fileDirectory": "csvFolder", "content": [ "Selma", "80" ] } |
{ "fileName": "test.csv", "listenEventType": "MODIFY", "fileDirectory": "csvFolder", "content": [ "Rana", "110" ] } |
{ "fileName": "test.csv", "listenEventType": "MODIFY", "fileDirectory": "csvFolder", "content": [ "Selina", "180" ] } |
列出和删除过程
我们可以看到正在执行的监听器列表
CALL apoc.load.directory.async.list();
例如,如果我们执行
CALL apoc.load.directory.async.add('csvImport',
"CALL apoc.load.csv($filePath) yield list WITH list CREATE (n:CsvToNode {content: list, fileName: $fileName, fileDirectory: $fileDirectory, listenEventType: $listenEventType})",
"*.csv", "csvFolder" ,{listenEventType: ["CREATE", "MODIFY"]})
结果将是
名称 | 状态 | 模式 | 密码 | urlDir | 配置 | 错误 |
---|---|---|---|---|---|---|
"csvImport" |
"正在运行" |
"*.csv" |
"CALL apoc.load.csv($filePath) yield list WITH list CREATE (n:CsvToNode {content: list, fileName: $fileName, fileDirectory: $fileDirectory, listenEventType: $listenEventType})" |
<importUrlDir>/csvFolder |
{"listenEventType": ["CREATE", "MODIFY"], "interval": 1000 } |
"" |
我们可以使用给定名称作为参数的删除过程来删除特定监听器
CALL apoc.load.directory.async.remove('csvImport')
结果将是剩余监听器的列表。
此外,我们可以使用以下过程删除所有内容(这将返回一个空结果)
CALL apoc.load.directory.async.removeAll()