【neo4j】 neo4j cypher单一语句 optional 可选操作的技巧

neo4j cypher单一语句 optional 可选操作的技巧

参考文章:
Optional merge on relationships
Cyper Merge on Optional Match

背景:

使用

match some node

中间还有一些可能与此node有联系的关系或者节点需要处理

create/merge/delete

javascript 复制代码
MATCH (src:SOURCE {id:'src-001'})
// 中间处理关系,如果使用MATCH,而非OPTIONAL MATCH,会导致整个语句不执行。
// 以下就以这个模板说明
DETACH DELETE src 

两种方法:

假设可能存在 f1->src-t1关系,现在要删除src,同时可能要创建f1->t1关系

OPTIONAL +CASE语句处理成[]数组,再遍历数组处理其他逻辑(无限制)

javascript 复制代码
MATCH (src:SOURCE {id:'src-001'})
// OPTIONAL MATCH影响整体语句:DETACH DELETE src
// CASE 后是f1或者t1都可以
// [1] 也可以是['abc']等,只要是单元素的列表都可以
WITC src OPTIONAL MATCH (f1:SOURCE)-[:RECORD]->(src)-[:RECORD]->(t1:SOURCE) 
WITH src,f1,t1,CASE f1 WHEN NULL THEN [] ELSE [1] END AS mk_list
FOREACH(i IN mk_list | MERGE (f1)-[:RECORD]->(t1))
DETACH DELETE src

直接生成数组再遍历数组处理其他逻辑(有限制)

假设可能存在 f1->src-t1关系,现在要删除src,同时可能要删除t1

javascript 复制代码
MATCH (src:SOURCE {id:'src-001'})
// [path | node]有点像shell的管道
// 限制就在此方法生成的[]只含有单节点,目前不知道怎么存储PATH并在FOREACH使用路径PATH
WITC src, [(f1:SOURCE)-[:RECORD]->(src)-[:RECORD]->(t1:SOURCE) | t1] AS mk_list
FOREACH(t IN mk_list | DETACH DELETE t)
DETACH DELETE src
相关推荐
喜欢打篮球的普通人3 天前
MLIR快速入门
neo4j·mlir
ELI_He9993 天前
Neo4j 安装 APOC
neo4j
綮地3 天前
Neo4j 基本处理
neo4j
lzp07914 天前
Neo4j图数据库学习(二)——SpringBoot整合Neo4j
数据库·学习·neo4j
爱折腾的小码农4 天前
neo4j数据库桌面管理工具
数据库·neo4j
Wenhao.8 天前
Docker 安装 neo4j
docker·容器·neo4j
RDCJM9 天前
Neo4j图数据库学习(二)——SpringBoot整合Neo4j
数据库·学习·neo4j
机器不学习我也不学习10 天前
TensorFlow环境安装
neo4j
码农老李12 天前
vxWorks7.0 Simpc运行tensorflow lite example
人工智能·tensorflow·neo4j
小鸡吃米…1 个月前
TensorFlow 实现异或(XOR)运算
人工智能·python·tensorflow·neo4j