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

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

注意事项:

  • 执行此操作后,所有数据都将丢失,不可恢复。请确保你已经备份了重要数据,或者你确实希望清空整个数据库。
相关推荐
GawynKing1 天前
Neo4j 社区版 Mac 安装教程
macos·neo4j
java坤坤7 天前
GoLand 项目从 0 到 1:第三天 —— 图数据库版本管理方案调研与中间件部署
neo4j·minio
liliangcsdn9 天前
mac neo4j install & verifcation
数据库·neo4j
Roc-xb9 天前
Neo4j如何修改用户密码?
neo4j
Likefr9 天前
Neo4j 框架 初步简单使用(基础增删改查)
neo4j
空中湖12 天前
PyTorch武侠演义 第一卷:初入江湖 第5章:玉如意的秘密
人工智能·pytorch·neo4j
少年攻城狮16 天前
Neo4j系列---【Linux离线安装neo4j】
linux·运维·服务器·neo4j
verify.Mar16 天前
docker && Neo4j
docker·容器·neo4j
Kakaxiii17 天前
【2025最新】使用neo4j实现GraphRAG所需的向量检索
自然语言处理·知识图谱·neo4j·向量数据库
BTU_YC18 天前
Neo4j Python 驱动库完整教程(带输入输出示例)
开发语言·python·neo4j