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 用于删除节点本身。

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

注意事项:

  • 执行此操作后,所有数据都将丢失,不可恢复。请确保你已经备份了重要数据,或者你确实希望清空整个数据库。
相关推荐
一屉大大大花卷1 天前
初识Neo4j之入门介绍(一)
数据库·neo4j
AustinCyy3 天前
【环境配置】Neo4j Community Windows 安装教程
windows·neo4j
萧鼎3 天前
深度探索 Py2neo:用 Python 玩转图数据库 Neo4j
数据库·python·neo4j
背太阳的牧羊人3 天前
Cypher 是 Neo4j 专用的查询语言
neo4j
lishaoan773 天前
使用tensorflow的线性回归的例子(九)
tensorflow·线性回归·neo4j
背太阳的牧羊人3 天前
Neo4j 的向量搜索(Neo4jVector)和常见的向量数据库(比如 Milvus、Qdrant)之间的区别与联系
数据库·neo4j·milvus
隆里卡那唔4 天前
在dify中通过http请求neo4j时为什么需要将localhost变为host.docker.internal
http·docker·neo4j
疯子的模样4 天前
Docker 安装 Neo4j 保姆级教程
docker·容器·neo4j
晋丑丑15 天前
从 0 到 1 构建 Graph RAG 系统:本地图谱 + 通义千问落地实践
前端·后端·python·neo4j
Lightning_201715 天前
Neo4j.5.X社区版创建数据库和切换数据库
数据库·oracle·neo4j