From 1a829ec4690d2c7ec22ad13e1a3fcfada4a446b7 Mon Sep 17 00:00:00 2001 From: jaywcjlove <398188662@qq.com> Date: Sun, 5 May 2024 17:31:37 +0800 Subject: [PATCH] doc: update neo4j document #636 --- assets/Neo4j.svg | 2 +- assets/neo4j.svg | 1 + docs/Neo4j.md | 138 ++++++++++++++++++++++++-------- docs/neo4j.md | 200 +++++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 308 insertions(+), 33 deletions(-) create mode 100644 assets/neo4j.svg create mode 100644 docs/neo4j.md diff --git a/assets/Neo4j.svg b/assets/Neo4j.svg index de34c65..dfe4532 100644 --- a/assets/Neo4j.svg +++ b/assets/Neo4j.svg @@ -1 +1 @@ -Neo4j \ No newline at end of file +Neo4j \ No newline at end of file diff --git a/assets/neo4j.svg b/assets/neo4j.svg new file mode 100644 index 0000000..dfe4532 --- /dev/null +++ b/assets/neo4j.svg @@ -0,0 +1 @@ +Neo4j \ No newline at end of file diff --git a/docs/Neo4j.md b/docs/Neo4j.md index 1b799d9..1cd0861 100644 --- a/docs/Neo4j.md +++ b/docs/Neo4j.md @@ -1,126 +1,200 @@ - -Neo4j备忘清单 +Neo4j 备忘清单 === 这个 [neo4j](https://neo4j.com/docs/) 快速参考备忘单显示了它的常用命令 -## 入门 +入门 +--- -### Neo4J安装 +### Neo4J 安装 -首先在 [https://neo4j.com/download/](https://link.zhihu.com/?target=https%3A//neo4j.com/download/) 下载Neo4J。Neo4J分为社区版和企业版,企业版在横向扩展、权限控制、运行性能、HA等方面都比社区版好,适合正式的生产环境,普通的学习和开发采用免费社区版就好。 +当开始使用 Neo4j 时,首先需要从[官网下载页面](https://neo4j.com/download/)下载 Neo4j。Neo4j 分为社区版和企业版。尽管企业版在横向扩展、权限控制、运行性能和高可用性等方面更优秀,适合正式的生产环境,但对于普通的学习和开发,免费的社区版就足够了。 -在Mac或者Linux中,安装好jdk后,直接解压下载好的Neo4J包,运行`bin/neo4j start`即可 +#### 运行 -### Neo4J使用 +```shell +$ bin/neo4j start +``` -Neo4J提供了一个用户友好的web界面,可以进行各项配置、写入、查询等操作,并且提供了可视化功能。类似ElasticSearch一样,我个人非常喜欢这种开箱即用的设计。 +在 Mac 或者 Linux 中,安装好 JDK 后,直接解压下载好的 Neo4j 包,然后运行上面命令即可。 -打开浏览器,输入`http://127.0.0.1:7474/browser/`,可以进入管理页面 +### Neo4J 使用 -## Neo4j示例 +Neo4J 提供了一个用户友好的 web 界面,可以进行各项配置、写入、查询等操作,并且提供了可视化功能。类似ElasticSearch 一样,我个人非常喜欢这种开箱即用的设计。 + +#### 进入管理页面 + +打开浏览器,输入下面网址,可以进入管理页面 + +```url +http://127.0.0.1:7474/browser/ +``` + +Neo4j 示例 +--- ### 创建 创建多个节点 -```text +```cypher CREATE (n:Person {name:'Sally'}) RETURN n; CREATE (n:Person {name:'Steve'}) RETURN n; ``` -创建‘FRIENDS’关系 +创建 `FRIENDS` 关系 -```text +```cypher MATCH (a:Person {name:'Sally'}), (b:Person {name:'Steve'}) MERGE (a)-[:FRIENDS]->(b) ``` -创建节点的时候就建好‘FRIENDS’关系 +创建节点的时候就建好 `FRIENDS` 关系 -```text +```cypher CREATE (a:Person {name:'Todd'})-[r:FRIENDS]->(b:Person {name:'Carlos'}) ``` -为创建完成的关系增加‘since’属性 +为创建完成的关系增加 `since` 属性 -```text +```cypher MATCH (a:Person {name:'Sally'}), (b:Person {name:'Steve'}) MERGE (a)-[:FRIENDS {since:2001}]->(b) ``` ### 删除 + 删除所有节点 -```text +```cypher MATCH (n) DETACH DELETE n ``` -删除‘Person’中‘name‘为’Mike‘节点的’test‘属性 +删除 `Person`中 `name`为 `Mike`节点的 `test`属性 -```text +```cypher MATCH (a:Person {name:'Mike'}) SET a.test='test' MATCH (a:Person {name:'Mike'}) REMOVE a.test ``` -删除’Location‘中’city‘为’Portland‘的节点 +删除 `Location` 中 `city` 为 `Portland` 的节点 -```text +```cypher MATCH (a:Location {city:'Portland'}) DELETE a ``` 删除有关系的节点(此处rel是写死的,指的是所有关系) -```text +```cypher MATCH (a:Person {name:'Todd'})-[rel]-(b:Person) DELETE a,b,rel ``` ### 查询 + -查询所有在Boston出生的人物 +查询所有在 `Boston` 出生的人物 -```text +```cypher MATCH (a:Person)-[:BORN_IN]->(b:Location {city:'Boston'}) RETURN a,b ``` 查询所有对外有关系的节点 -```text +```cypher MATCH (a)-->() RETURN a ``` 查询所有有关系的节点 -```text +```cypher MATCH (a)--() RETURN a ``` 查询所有对外有关系的节点,以及关系类型 -```text +```cypher MATCH (a)-[r]->() RETURN a.name, type(r) ``` 查询所有有结婚关系的节点 -```text +```cypher MATCH (n)-[:MARRIED]-() RETURN n ``` 查找某人的朋友的朋友 -```text +```cypher MATCH (a:Person {name:'Mike'})-[r1:FRIENDS]-()-[r2:FRIENDS]-(friend_of_a_friend) RETURN friend_of_a_friend.name AS fofName ``` +### 创建节点和关系 + + +```cypher +// 创建节点 +CREATE (n:Person {name: 'Alice', age: 30}) +CREATE (n:Person {name: 'Bob', age: 25}) + +// 创建关系 +MATCH (alice:Person {name: 'Alice'}), (bob:Person {name: 'Bob'}) +CREATE (alice)-[:FRIENDS]->(bob) +``` + ### 增加/修改节点的属性 -```text +```cypher MATCH (a:Person {name:'Liz'}) SET a.age=34 -MATCH (a:Person {name:'Shawn'}) SET a.age=32 +MATCH (a:Person {name:'Shaw'}) SET a.age=32 MATCH (a:Person {name:'John'}) SET a.age=44 MATCH (a:Person {name:'Mike'}) SET a.age=25 ``` + +### 查询节点和关系 + + +```cypher +// 查询所有节点和关系 +MATCH (n) +RETURN n + +// 查询特定节点 +MATCH (n:Person) +WHERE n.name = 'Alice' +RETURN n + +// 查询节点的关系 +MATCH (n:Person)-[r]->() +WHERE n.name = 'Alice' +RETURN r +``` + +### 更新节点和关系 + +```cypher +// 更新节点属性 +MATCH (n:Person {name: 'Alice'}) +SET n.age = 31 +RETURN n + +// 删除节点 +MATCH (n:Person {name: 'Bob'}) +DELETE n +``` + +### 更复杂的查询 + + +```cypher +// 查找 Alice 的朋友的朋友 +MATCH (alice:Person {name: 'Alice'})-[:FRIENDS]->()-[:FRIENDS]->(fof) +RETURN fof + +// 查找共同朋友 +MATCH (alice:Person {name: 'Alice'})-[:FRIENDS]->(friend), + (bob:Person {name: 'Bob'})-[:FRIENDS]->(friend) +RETURN friend +``` diff --git a/docs/neo4j.md b/docs/neo4j.md new file mode 100644 index 0000000..1cd0861 --- /dev/null +++ b/docs/neo4j.md @@ -0,0 +1,200 @@ +Neo4j 备忘清单 +=== + +这个 [neo4j](https://neo4j.com/docs/) 快速参考备忘单显示了它的常用命令 + +入门 +--- + +### Neo4J 安装 + +当开始使用 Neo4j 时,首先需要从[官网下载页面](https://neo4j.com/download/)下载 Neo4j。Neo4j 分为社区版和企业版。尽管企业版在横向扩展、权限控制、运行性能和高可用性等方面更优秀,适合正式的生产环境,但对于普通的学习和开发,免费的社区版就足够了。 + +#### 运行 + +```shell +$ bin/neo4j start +``` + +在 Mac 或者 Linux 中,安装好 JDK 后,直接解压下载好的 Neo4j 包,然后运行上面命令即可。 + +### Neo4J 使用 + +Neo4J 提供了一个用户友好的 web 界面,可以进行各项配置、写入、查询等操作,并且提供了可视化功能。类似ElasticSearch 一样,我个人非常喜欢这种开箱即用的设计。 + +#### 进入管理页面 + +打开浏览器,输入下面网址,可以进入管理页面 + +```url +http://127.0.0.1:7474/browser/ +``` + +Neo4j 示例 +--- + +### 创建 + +创建多个节点 + +```cypher +CREATE (n:Person {name:'Sally'}) RETURN n; +CREATE (n:Person {name:'Steve'}) RETURN n; +``` + +创建 `FRIENDS` 关系 + +```cypher +MATCH (a:Person {name:'Sally'}), + (b:Person {name:'Steve'}) +MERGE (a)-[:FRIENDS]->(b) +``` + +创建节点的时候就建好 `FRIENDS` 关系 + +```cypher +CREATE (a:Person {name:'Todd'})-[r:FRIENDS]->(b:Person {name:'Carlos'}) +``` + +为创建完成的关系增加 `since` 属性 + +```cypher +MATCH (a:Person {name:'Sally'}), + (b:Person {name:'Steve'}) +MERGE (a)-[:FRIENDS {since:2001}]->(b) +``` + +### 删除 + + +删除所有节点 + +```cypher +MATCH (n) DETACH DELETE n +``` + +删除 `Person`中 `name`为 `Mike`节点的 `test`属性 + +```cypher +MATCH (a:Person {name:'Mike'}) SET a.test='test' +MATCH (a:Person {name:'Mike'}) REMOVE a.test +``` + +删除 `Location` 中 `city` 为 `Portland` 的节点 + +```cypher +MATCH (a:Location {city:'Portland'}) DELETE a +``` + +删除有关系的节点(此处rel是写死的,指的是所有关系) + +```cypher +MATCH (a:Person {name:'Todd'})-[rel]-(b:Person) DELETE a,b,rel +``` + +### 查询 + + +查询所有在 `Boston` 出生的人物 + +```cypher +MATCH (a:Person)-[:BORN_IN]->(b:Location {city:'Boston'}) RETURN a,b +``` + +查询所有对外有关系的节点 + +```cypher +MATCH (a)-->() RETURN a +``` + + 查询所有有关系的节点 + +```cypher +MATCH (a)--() RETURN a +``` + +查询所有对外有关系的节点,以及关系类型 + +```cypher +MATCH (a)-[r]->() RETURN a.name, type(r) +``` + +查询所有有结婚关系的节点 + +```cypher +MATCH (n)-[:MARRIED]-() RETURN n +``` + +查找某人的朋友的朋友 + +```cypher +MATCH (a:Person {name:'Mike'})-[r1:FRIENDS]-()-[r2:FRIENDS]-(friend_of_a_friend) RETURN friend_of_a_friend.name AS fofName +``` + +### 创建节点和关系 + + +```cypher +// 创建节点 +CREATE (n:Person {name: 'Alice', age: 30}) +CREATE (n:Person {name: 'Bob', age: 25}) + +// 创建关系 +MATCH (alice:Person {name: 'Alice'}), (bob:Person {name: 'Bob'}) +CREATE (alice)-[:FRIENDS]->(bob) +``` + +### 增加/修改节点的属性 + +```cypher +MATCH (a:Person {name:'Liz'}) SET a.age=34 +MATCH (a:Person {name:'Shaw'}) SET a.age=32 +MATCH (a:Person {name:'John'}) SET a.age=44 +MATCH (a:Person {name:'Mike'}) SET a.age=25 +``` + +### 查询节点和关系 + + +```cypher +// 查询所有节点和关系 +MATCH (n) +RETURN n + +// 查询特定节点 +MATCH (n:Person) +WHERE n.name = 'Alice' +RETURN n + +// 查询节点的关系 +MATCH (n:Person)-[r]->() +WHERE n.name = 'Alice' +RETURN r +``` + +### 更新节点和关系 + +```cypher +// 更新节点属性 +MATCH (n:Person {name: 'Alice'}) +SET n.age = 31 +RETURN n + +// 删除节点 +MATCH (n:Person {name: 'Bob'}) +DELETE n +``` + +### 更复杂的查询 + + +```cypher +// 查找 Alice 的朋友的朋友 +MATCH (alice:Person {name: 'Alice'})-[:FRIENDS]->()-[:FRIENDS]->(fof) +RETURN fof + +// 查找共同朋友 +MATCH (alice:Person {name: 'Alice'})-[:FRIENDS]->(friend), + (bob:Person {name: 'Bob'})-[:FRIENDS]->(friend) +RETURN friend +```