当前位置: 首页 > news >正文

Neo4j常见语句-merge

merge用法:MERGE 是 Neo4j 中一个强大的操作符,用于确保图中存在特定的节点或关系。它的核心逻辑是:如果目标存在则匹配,不存在则创建
基本语法与逻辑:

MERGE <pattern>
[ON CREATE <create_clause>]  // 不存在时执行
[ON MATCH <match_clause>]     // 存在时执行

(1). 简单创建 / 匹配节点

 // 确保存在一个名为"周杰伦"的歌手节点 (多次执行以下语句,只会插入一条数据,因为如果存在则不执行)
MERGE (s:Singer {name: "周杰伦"})
RETURN s

(2)带属性更新的节点 MERGE

  // 创建或更新节点属性 (因为上面 周杰伦这条数据创建过,所以走Match,会创建一个lastUpdate 属性)
MERGE (s:Singer {name: "周杰伦"})
ON CREATE SET s.age = 43, s.debut = 2000
ON MATCH SET s.lastUpdate = timestamp()
RETURN s

(3)合并多个标签的节点

  // 节点同时属于歌手和演员 (也就是说同时创建3个node 节点Person、Singer、Actor,name属性为刘德华)
MERGE (p:Person:Singer:Actor {name: "刘德华"})
SET p.age = 61
RETURN p

注释:打个比方,如果我已经存在了Person,Singer nodej节点的刘德华,但是没有Actor 节点,执行上面语句,只会创建Actor节点,其他两个节点不会创建

(4)创建 / 匹配节点间的关系

  // 确保周杰伦和陈奕迅之间存在"朋友"关系(在如下语句里面会创建周杰伦和陈奕迅这两个节点数据,然后给他们设置关系(如果关系不存在的话))
MERGE (j:Singer {name: "周杰伦"})
MERGE (e:Singer {name: "陈奕迅"})
MERGE (j)-[r:FRIEND]->(e)
SET r.since = 2005
RETURN r

(5)带条件更新的关系 MERGE

 // 匹配或创建关系,并根据情况更新属性 (如下语句,因为已经存在两个节点,所以会设置lastMet的关系属性)
MERGE (j:Singer {name: "周杰伦"})-[r:FRIEND]-(e:Singer {name: "陈奕迅"})
ON CREATE SET r.since = 2005, r.verified = true
ON MATCH SET r.lastMet = timestamp()
RETURN r

(6)MERGE 与 UNIQUE 约束结合
创建唯一性约束

  // 确保姓名是歌手节点的唯一标识
CREATE CONSTRAINT ON (s:Singer) ASSERT s.name IS UNIQUE

基于约束的 MERGE

 // 约束会增强 MERGE 的匹配效率
MERGE (s:Singer {name: "王菲"})
SET s.gender = "女"
RETURN s

(7)MERGE 的性能优化
使用 UNWIND 批量处理

 // 批量创建多个歌手节点
WITH [{name: "张学友", age: 62},{name: "郭富城", age: 58}
] AS singersUNWIND singers AS singer
MERGE (s:Singer {name: singer.name})
SET s.age = singer.age
RETURN count(s)

(8)MERGE 的注意事项

a.模式匹配的精确性:
MERGE (n:Person {name: "张三"}) 只会匹配完全符合属性的节点,若节点还有其他属性(如 age),仍会被匹配。
b.性能开销:
MERGE 比 CREATE 慢,因为它需要先检查是否存在,适合需要避免重复数据的场景。
c.与 WHERE 结合
// 仅当歌手年龄小于60时才创建关系
MERGE (j:Singer {name: "周杰伦"})
MERGE (s:Singer {name: "孙燕姿"})
WHERE s.age < 60
MERGE (j)-[r:COLLABORATED]->(s)

相关文章:

  • 【AI Study】第四天,Pandas(5)- 数据可视化
  • 什么是MapReduce
  • 机器学习常用评估指标
  • 深入理解XGBoost(何龙 著)学习笔记(四)
  • TensorFlow基础之理解张量
  • Linux系统移植10:uboot移植
  • Ubuntu22.04安装opengauss并配置远程访问、JDBC连接
  • 创世新布控球 国标
  • FramePack 全面测评:革新视频生成体验
  • 蚂蚁百宝箱+MCP打造p 人解放神器agent,解放大脑
  • class对象【C#】2025复习
  • linux 下 jenkins 构建 uniapp node-sass 报错
  • rapidocr v3.2.0发布
  • CompletableFuture异步编程的六大典型问题与解决方案
  • 从零学起VIM
  • Zama 的门限密钥管理系统(TKMS)
  • 如何利用小模型,快速筛选照片
  • Vulkan学习笔记10—描述符与统一缓冲区
  • 使用nvm管理npm和pnpm
  • 支持selenium的chrome driver更新到137.0.7151.119
  • 网站制作最流行软件/淘宝seo排名优化的方法
  • 做物流网站模块/今日新闻7月1日
  • 做网站阿里巴巴好还是百度好/推广app平台有哪些
  • 手机网站复制功能实现/成都seo优化
  • github 做自己的网站/公司做网站一般多少钱
  • ipsw 是谁做的网站/最新推广赚钱的app