【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
相关推荐
码农学院4 小时前
Neo4j知识图谱赋能跨境电商GEO:LLM实体识别与AI搜索引擎结构化数据输出实战
人工智能·知识图谱·neo4j
TE-茶叶蛋4 小时前
RAG智能电商客服什么时候上Neo4j?
neo4j
hhzz2 天前
(九)在MCU上跑AI推理:ESP-DL vs TFLite Micro,选哪个?怎么优化?
人工智能·单片机·neo4j·esp·ai推理
༄沐࿆风࿆࿆2 天前
neo4j Desktop下载学习笔记
笔记·学习·neo4j
我是唐青枫2 天前
Java Neo4j 实战指南:从图模型、Cypher 到 Spring Boot 关系查询
java·spring boot·neo4j
AI-好学者7 天前
RDF对比与Neo4j性能优化
人工智能·知识图谱·neo4j·knowledge graph
冷小鱼12 天前
Neo4j 深度解析:从原生图存储到 GraphRAG 的知识图谱革命
人工智能·知识图谱·neo4j
24计网1王仔寿16 天前
Linux运维与云计算全栈系统化学习指南(Shell+虚拟化+OpenStack+Docker+公私云实战)
linux·课程设计·数据库开发·微信公众平台·neo4j·命令模式·sequoiadb
羊羊小栈1 个月前
基于GraphRAG的医疗健康知识诊断系统(Neo4j_大语言模型)
人工智能·语言模型·毕业设计·知识图谱·创业创新·neo4j·大作业
羊羊小栈1 个月前
基于GraphRAG的地质矿产知识管理系统(Neo4j_大语言模型)
人工智能·语言模型·自然语言处理·毕业设计·neo4j·大作业