【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
相关推荐
嗯嗯**2 天前
Neo4j学习2:概念、数据展示、CQL使用
数据库·学习·neo4j·数据存储·图数据库·序列化·cql
嗯嗯**2 天前
Neo4j学习4:数据导入
学习·neo4j·图数据库·csv·数据导入
嗯嗯**2 天前
Neo4j学习3:Java连接图库并执行CQL
java·学习·spring·neo4j·图数据库·驱动·cql
嗯嗯**3 天前
Neo4j学习1:概述、安装
学习·neo4j·概述·安装·图数据库·jdk21
小陈phd3 天前
混合知识库搭建:本地Docker部署Neo4j图数据库与Milvus向量库
数据库·docker·neo4j
码云数智-大飞4 天前
基于语义内核(Semantic Kernel)与 Neo4j 构建轻量级知识问答系统
neo4j
执携7 天前
Neo4j的安装与配置
neo4j
matlabgoodboy9 天前
知识图谱neo4j项目构建代制做python可视化问答系统推荐实体抽取
python·知识图谱·neo4j
麦麦大数据9 天前
F076 中医中药知识智能问答与图谱构建研究系统 Vue+Flask+Neo4j
vue.js·flask·知识图谱·neo4j·智能问答·推荐算法·中医中药
攻城狮凌霄9 天前
PHP接单涨薪系列(七十一):如何用Neo4j构建借贷关系图谱?解析资金流水时空矩阵揪出“砍头息“和“循环贷“
矩阵·php·neo4j