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

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

注意事项:

  • 执行此操作后,所有数据都将丢失,不可恢复。请确保你已经备份了重要数据,或者你确实希望清空整个数据库。
相关推荐
AI_56781 天前
CI/CD自动化部署革命:“三分钟流水线“背后的工程实践
java·开发语言·人工智能·ai·neo4j
武子康1 天前
Java-169 Neo4j CQL 实战速查:字符串/聚合/关系与多跳查询
java·开发语言·数据库·python·sql·nosql·neo4j
IT_Beijing_BIT1 天前
tensorflow 图像分类 之二
分类·tensorflow·neo4j
武子康2 天前
Java-167 Neo4j CQL 实战:CREATE/MATCH 与关系建模速通 案例实测
java·开发语言·数据库·python·sql·nosql·neo4j
AI_56783 天前
AI开发革命:PyCharm科学计算模式重塑TensorFlow调试体验
人工智能·ai·neo4j
Aurora(^*_*^)4 天前
Neo4j Windows桌面版安装及更改默认数据存储位置
windows·neo4j
武子康7 天前
Java-166 Neo4j 安装与最小闭环 | 10 分钟跑通 + 远程访问 Docker neo4j.conf
java·数据库·sql·docker·系统架构·nosql·neo4j
杨某不才9 天前
int8_to_float(output_tensor->data.int8, output_float, load_class_num);
neo4j
视觉AI9 天前
为什么 transformers 要 import TensorFlow
人工智能·tensorflow·neo4j
封奚泽优11 天前
Neo4j中导入.owl数据
知识图谱·neo4j·owl·rdf