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

Neo4j 基础语法指南

Neo4j 基础语法指南

Neo4j 是最流行的图数据库之一,使用 Cypher 作为查询语言。Cypher 语法简洁直观,专为处理图数据(节点、关系和属性)设计。本指南将介绍 Neo4j Cypher 的核心语法和基本操作。

一、基本概念

在 Neo4j 中,数据模型由三部分组成:

  • 节点(Node):表示实体,如人、物、地点等
  • 关系(Relationship):连接两个节点,有方向和类型
  • 属性(Property):键值对,可附加在节点或关系上

二、创建操作(CREATE)

创建节点

创建一个简单节点(无标签和属性):

CREATE ()

创建带标签的节点:

CREATE (p:Person)  // 创建一个带有Person标签的节点

创建带属性的节点:

CREATE (p:Person {name: 'Alice', age: 30, city: 'New York'})

创建多个节点:

CREATE (p1:Person {name: 'Bob'}), (p2:Person {name: 'Charlie'})

创建关系

创建两个节点之间的关系:

// 先创建两个节点,再创建它们之间的关系
CREATE (p1:Person {name: 'Alice'}), (p2:Person {name: 'Bob'})
CREATE (p1)-[r:FRIENDS_WITH]->(p2)

创建带属性的关系:

CREATE (p1)-[r:FRIENDS_WITH {since: 2020, strength: 8}]->(p2)

三、查询操作(MATCH)

查询节点

查询所有节点:

MATCH (n) RETURN n

查询特定标签的节点:

MATCH (p:Person) RETURN p

查询带条件的节点:

MATCH (p:Person {name: 'Alice'}) RETURN p.name, p.age

带WHERE子句的查询:

MATCH (p:Person)
WHERE p.age > 25 AND p.city = 'New York'
RETURN p.name, p.age

查询关系

查询特定类型的关系:

MATCH ()-[r:FRIENDS_WITH]->()
RETURN r

查询节点和关系:

MATCH (p1:Person)-[r:FRIENDS_WITH]->(p2:Person)
RETURN p1.name, r.since, p2.name

查询路径:

// 查询两个节点之间的路径
MATCH path = (p1:Person {name: 'Alice'})-[*..3]->(p2:Person {name: 'David'})
RETURN path

四、更新操作(SET)

更新节点属性:

MATCH (p:Person {name: 'Alice'})
SET p.age = 31, p.city = 'Boston'
RETURN p

添加新属性:

MATCH (p:Person {name: 'Alice'})
SET p.email = 'alice@example.com'
RETURN p

添加标签:

MATCH (p:Person {name: 'Alice'})
SET p:Employee:Manager
RETURN p

更新关系属性:

MATCH (p1:Person {name: 'Alice'})-[r:FRIENDS_WITH]->(p2:Person {name: 'Bob'})
SET r.strength = 9, r.last_contact = '2023-01-15'
RETURN r

五、删除操作(DELETE & REMOVE)

删除节点:

// 必须先删除节点的所有关系才能删除节点
MATCH (p:Person {name: 'Alice'})
DETACH DELETE p

删除关系:

MATCH (p1:Person {name: 'Alice'})-[r:FRIENDS_WITH]->(p2:Person {name: 'Bob'})
DELETE r

删除属性:

MATCH (p:Person {name: 'Alice'})
REMOVE p.age
RETURN p

删除标签:

MATCH (p:Person {name: 'Alice'})
REMOVE p:Manager
RETURN p

清空数据库:

MATCH (n)
DETACH DELETE n

六、合并操作(MERGE)

MERGE 类似于 CREATE,但会先检查是否存在匹配的节点或关系,不存在才创建:

合并节点:

MERGE (p:Person {name: 'Alice'})
ON CREATE SET p.created = timestamp()
ON MATCH SET p.last_seen = timestamp()
RETURN p

合并关系:

MATCH (p1:Person {name: 'Alice'}), (p2:Person {name: 'Bob'})
MERGE (p1)-[r:FRIENDS_WITH]->(p2)
ON CREATE SET r.since = timestamp()
RETURN r

七、聚合与排序

计数:

MATCH (p:Person)
RETURN p.city, count(p) AS people_count
ORDER BY people_count DESC

平均值:

MATCH (p:Person)
RETURN avg(p.age) AS average_age

排序和限制:

MATCH (p:Person)
RETURN p.name, p.age
ORDER BY p.age DESC
LIMIT 5

八、索引与约束

创建索引(提高查询性能):

CREATE INDEX idx_person_name FOR (p:Person) ON (p.name)

创建唯一约束(确保属性值唯一):

CREATE CONSTRAINT unique_person_email FOR (p:Person) REQUIRE p.email IS UNIQUE

九、常用函数

字符串函数:

MATCH (p:Person)
RETURN p.name, upper(p.name), substring(p.name, 0, 3)

日期函数:

RETURN date(), datetime(), timestamp()

集合函数:

MATCH (p:Person)-[:FRIENDS_WITH]->(friend)
RETURN p.name, collect(friend.name) AS friends

总结

以上是 Neo4j Cypher 的基础语法,涵盖了创建、查询、更新、删除等核心操作。Cypher 的设计理念是接近自然语言,易于理解和使用。对于复杂查询和高级功能,可以参考 Neo4j 官方文档进一步学习。

通过熟练掌握这些基础语法,你可以开始构建和查询自己的图数据库模型,发掘数据中隐藏的关系和模式。

http://www.dtcms.com/a/314244.html

相关文章:

  • 基于Spring Cloud Gateway和Resilience4j的微服务容错与流量控制实战经验分享
  • javacc学习笔记 03、编译原理实践 - JavaCC解析表达式并生成抽象语法树
  • MySQL5.0数据库管理系统安装部署
  • PCB反焊盘的样子越诡异,高速过孔的性能越好?
  • [自动化Adapt] 父子事件| 冗余过滤 | SQLite | SQLAlchemy | 会话工厂 | Alembic
  • 【物联网】基于树莓派的物联网开发【23】——树莓派安装SQLite嵌入式数据库
  • 秋招笔记-8.4
  • 小实验:按键点灯(中断法)
  • QT的UDP
  • 【数据结构入门】链表
  • Solidity智能合约开发全攻略
  • Java基础-斗地主游戏
  • ArrayDeque双端队列--底层原理可视化
  • ubuntu修改时区
  • 【HZ-T536开发板免费体验】Cangjie Magic调用视觉语言大模型(VLM)真香,是不是可以没有YOLO和OCR了?
  • 通用 PDF 文件流 OCR 到文本 API 接口
  • 使用 Aspose.OCR 将图像文本转换为可编辑文本
  • 基础14-Java集合框架:掌握List、Set和Map的使用
  • 十字滑台:精密制造的“心脏“如何跳动?
  • 耘瞳科技国产化点云处理软件,开启智能化三维测量新时代
  • [机器学习]01-构建简单的贝叶斯分类器
  • 抓包相关知识学习
  • 项目复盘:Arena Of Furnace
  • vtkSSAAPass代码解析
  • [自动化Adapt] 回放策略 | AI模型驱动程序
  • Python异常捕获全指南
  • 智慧泵房赋能二次供水互联网化:物联网驱动下的全场景解决方案
  • Solidity全局变量与安全实践指南
  • Linux 文件与目录属性管理总结
  • 设备能力指标(CP/CPK)