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

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

注意事项:

  • 执行此操作后,所有数据都将丢失,不可恢复。请确保你已经备份了重要数据,或者你确实希望清空整个数据库。
相关推荐
缘友一世19 小时前
Neo4j 5.26.x容器 APOC插件Generating Graphs无法正常使用解决方法/Neo4j 5.26.x容器安装APOC拓展库
neo4j
Gratitute_林腾1 天前
neo4j-解决导入数据后出现:Database ‘xxxx‘ is unavailable. Run :sysinfo for more info.
数据库·neo4j
初学者↑1 天前
知识图谱可视化系统python+neo4j+vue3
python·知识图谱·neo4j
亲持红叶2 天前
神经网络常见激活函数 4-LeakyReLU函数
人工智能·pytorch·深度学习·神经网络·机器学习·neo4j
Gratitute_林腾4 天前
neo4j-在Linux中安装neo4j
linux·neo4j
缘友一世5 天前
Macos给brew安装的neo4j配置apoc插件
macos·neo4j
高桐@BILL6 天前
Build and install error messages
neo4j
代码骑士6 天前
第四章 基于本地部署的大语言模型OLlama&Neo4j图数据库的知识图谱搭建
数据库·语言模型·neo4j
未来之窗软件服务8 天前
人脸识别国内镜像
neo4j