neo4j-neo4j网页版的基本操作

目录

查找所有节点

创建节点

创建带有关系的节点

注意

如何避免重复创建?

删除节点

删除所有节点及其关系


查找所有节点

复制代码
MATCH (n) RETURN n

创建节点

复制代码
CREATE (:Person {name: "Alice", age: 25})

这会创建一个 Person 标签的节点,并赋予 nameage 属性。

为什么Person前面有个冒号?

  • 在 Cypher 语法中,: 号用于标识标签(Label)。
  • 如果你在 MATCHCREATE 等语句中写 Person,Neo4j 可能会把它当作一个变量,而:Person 确保 Neo4j 知道这是一个标签。

创建带有关系的节点

复制代码
CREATE (a:Person {name: "Alice"})-[:FRIENDS_WITH]->(b:Person {name: "Bob"})

这将创建 AliceBob 两个 Person 节点,并建立 FRIENDS_WITH 关系。

为什么FRIENDS_WITH 前面要加个冒号?

在 Cypher 里,关系必须有明确的类型 ,所以 : 号用于指定关系的名称 。如果关系类型前不加 :,Neo4j 会报错,因为它无法识别关系的名称!

注意

如果 AliceBob 已经存在,上述 CREATE 语句仍然会创建新的 AliceBob 节点,而不是复用已有的节点。这样可能会导致数据库中出现多个 AliceBob 节点,数据冗余。

复制代码
MERGE (a:Person {name: "Alice"})
MERGE (b:Person {name: "Bob"})
MERGE (a)-[:FRIENDS_WITH]->(b)

如上图所示,出现了两个Alice和两个Bob

如何避免重复创建?

使用 MERGE 代替 CREATE

如果你希望只创建不存在的节点 ,可以用 MERGE

复制代码
MERGE (a:Person {name: "Alice"})
MERGE (b:Person {name: "Bob"})
MERGE (a)-[:FRIENDS_WITH]->(b)

MERGE 的作用:

  1. 如果 AliceBob 不存在,就创建它们。
  2. 如果 AliceBob 已经存在,则不会重复创建。
  3. MERGE (a)-[:FRIENDS_WITH]->(b) 确保关系也是唯一的。

ON CREATE / ON MATCH 设置额外属性

MERGE 还能配合 ON CREATEON MATCH 添加额外逻辑:

复制代码
MERGE (a:Person {name: "Alice"})
ON CREATE SET a.createdAt = timestamp()
ON MATCH SET a.lastSeen = timestamp()

MERGE (b:Person {name: "Bob"})
ON CREATE SET b.createdAt = timestamp()
ON MATCH SET b.lastSeen = timestamp()

MERGE (a)-[:FRIENDS_WITH]->(b)

作用:

  • 如果 AliceBob 第一次创建 ,添加 createdAt 时间戳。
  • 如果 AliceBob 已经存在 ,更新 lastSeen
  • ON CREATE :当节点或关系被创建 时执行。这通常用于设置只在节点首次创建时才需要的属性
  • ON MATCH :当节点或关系已经存在 时执行。通常用于更新已有节点的属性
  • ab节点变量 ,它们用来引用你在查询中创建或匹配的节点。可以把它们理解为占位符,用来代表查询中的具体节点或实体。

删除节点

如果你想删除某个节点(但不能有任何关系):

复制代码
MATCH (p:Person {name: "Alice"}) DELETE p

如果该节点有关系,先删除关系:

复制代码
MATCH (p:Person {name: "Alice"})-[r]-() DELETE r, p

疑问解答Q&A

Q:为什么这里的r前面没有冒号,它不是关系吗?

A:这是因为 r关系的变量 ,而不是关系类型 。我们需要区分关系的类型关系的变量 。在 Cypher 中,冒号(:)用于表示标签(Label)或关系类型(Relationship Type) 。而在这里,r 是关系的变量 ,并不是关系类型,所以不需要冒号


Q:我什么时候该使用关系类型?什么时候该使用关系变量呢?

A:如果你想对节点的特定类型的关系 进行操作(比如:朋友关系、工作关系、喜欢关系等),你就需要使用关系类型 。关系类型是用冒号 : 来指定的。

如果你想对一个节点的所有关系 进行操作,而不关心这些关系的具体类型,你就需要使用关系变量 。关系变量是用来引用某个特定关系实例的占位符

删除所有节点及其关系

复制代码
MATCH (n) DETACH DELETE n
  • MATCH (n):匹配所有节点。
  • DETACH DELETE nDETACH 关键字确保删除节点时,也会同时删除与该节点相关的所有关系。DELETE 用于删除节点本身。

这个查询会删除数据库中所有的节点和它们的关系。

注意事项:

  • 执行此操作后,所有数据都将丢失,不可恢复。请确保你已经备份了重要数据,或者你确实希望清空整个数据库。
相关推荐
喵叔哟15 小时前
第1章:Neo4j简介与图数据库基础
数据库·oracle·neo4j
喵叔哟15 小时前
第6章:Neo4j数据导入与导出
数据库·oracle·neo4j
struggle20251 天前
RushDB开源程序 是现代应用程序和 AI 的即时数据库。建立在 Neo4j 之上
数据库·typescript·neo4j
Kookoos4 天前
ABP VNext 与 Neo4j:构建基于图数据库的高效关系查询
数据库·c#·.net·neo4j·abp vnext
西柚小萌新5 天前
【大模型:知识图谱】--5.neo4j数据库管理(cypher语法2)
数据库·知识图谱·neo4j
局外人LZ5 天前
Docker轻松搭建Neo4j+APOC环境
docker·容器·neo4j
QQ676580085 天前
基于 TensorFlow 2 的 WGAN来生成表格数据、数值数据和序列数据。 WGAN生成对抗网络。代码仅供参考
生成对抗网络·tensorflow·neo4j·表格数据·wgan·对抗网络·序列数据
Java知识库5 天前
Spring Boot+Neo4j知识图谱实战:3步搭建智能关系网络!
spring boot·知识图谱·neo4j
西柚小萌新7 天前
【大模型:知识图谱】--3.py2neo连接图数据库neo4j
数据库·知识图谱·neo4j
weixin_307779137 天前
Neo4j 数据可视化与洞察获取:原理、技术与实践指南
信息可视化·架构·数据分析·neo4j·etl