1. 创建节点和关系
文章来源:https://uudwc.com/A/201G1
使用CREATE命令创建节点和关系。例如,要创建一个名为“John”的人节点,可以使用以下命令:
```
CREATE (:Person {name: 'John'})
```
这将创建一个类型为“Person”的节点,并将其属性“name”设置为“John”。
要创建一个名为“likes”的关系,将“John”节点连接到“Mary”节点,可以使用以下命令:
```
MATCH (p1:Person {name: 'John'}), (p2:Person {name: 'Mary'})
CREATE (p1)-[:likes]->(p2)
```
这将创建一个类型为“likes”的关系,将“John”节点与“Mary”节点连接起来。
2. 查询节点和关系
使用MATCH命令查询节点和关系。例如,要查找所有名为“John”的人节点,可以使用以下命令:
```
MATCH (p:Person {name: 'John'})
RETURN p
```
这将返回一个名为“p”的变量,其中包含所有匹配条件为“name为John”的“Person”节点。
要查找所有与“John”节点连接的节点,可以使用以下命令:
```
MATCH (p1:Person {name: 'John'})-[:likes]->(p2:Person)
RETURN p2
```
这将返回一个名为“p2”的变量,其中包含所有与“John”节点通过“likes”关系连接的“Person”节点。
3. 更新节点和关系
使用SET命令更新节点和关系的属性。例如,要将“John”节点的“age”属性设置为“30”,可以使用以下命令:
```
MATCH (p:Person {name: 'John'})
SET p.age = 30
```
这将更新所有匹配条件为“name为John”的“Person”节点的“age”属性。
要删除“John”节点与“Mary”节点之间的“likes”关系,可以使用以下命令:
```
MATCH (p1:Person {name: 'John'})-[r:likes]->(p2:Person {name: 'Mary'})
DELETE r
```
这将删除所有匹配条件为“name为John”的节点与匹配条件为“name为Mary”的节点之间的“likes”关系。
当然,以下是一些其他的Neo4j Cypher查询技巧和用法:
4. 过滤查询结果
使用WHERE命令过滤查询结果。例如,要查找所有年龄大于等于30岁的人节点,可以使用以下命令:
```
MATCH (p:Person)
WHERE p.age >= 30
RETURN p
```
这将返回所有匹配条件为“age大于等于30”的“Person”节点。
5. 聚合查询结果
1. COUNT:计算匹配的节点或关系的数量。
假设我们想要计算在2023年6月9日访问健身房的人数。以下查询将返回匹配的节点数量:
```
MATCH (p:Person)
WHERE p.visitDate = '2023-06-09'
RETURN COUNT(p) AS visitCount
```
2. SUM:计算匹配的数字属性的总和。
假设我们想要计算在2023年6月9日访问健身房的人员总访问时间。以下查询将返回匹配的节点的entryTime和leaveTime属性之和:
```
MATCH (p:Person)
WHERE p.visitDate = '2023-06-09'
RETURN SUM(p.leaveTime - p.entryTime) AS totalVisitTime
```
3. AVG:计算匹配的数字属性的平均值。
假设我们想要计算在2023年6月访问健身房的人员平均访问时间。以下查询将返回匹配的节点的entryTime和leaveTime属性的平均值:
```
MATCH (p:Person)
WHERE p.visitDate >= '2023-06-01' AND p.visitDate <= '2023-06-30'
RETURN AVG(p.leaveTime - p.entryTime) AS avgVisitTime
```
4. MIN:查找匹配的数字属性的最小值。
假设我们想要查找在2023年6月访问健身房的人员中最早进入健身房的人员。以下查询将返回匹配的节点中entryTime属性的最小值:
```
MATCH (p:Person)
WHERE p.visitDate >= '2023-06-01' AND p.visitDate <= '2023-06-30'
RETURN MIN(p.entryTime) AS earliestEntryTime
```
5. MAX:查找匹配的数字属性的最大值。
假设我们想要查找在2023年6月访问健身房的人员中最晚离开健身房的人员。以下查询将返回匹配的节点中leaveTime属性的最大值:
```
MATCH (p:Person)
WHERE p.visitDate >= '2023-06-01' AND p.visitDate <= '2023-06-30'
RETURN MAX(p.leaveTime) AS latestLeaveTime
```
6. 处理重复节点和关系
使用DISTINCT命令去除查询结果中的重复节点和关系。例如,要查找所有与“John”节点通过“likes”关系连接的不同“Person”节点,可以使用以下命令:
```
MATCH (p1:Person {name: 'John'})-[:likes]->(p2:Person)
RETURN DISTINCT p2
```
这将返回所有匹配条件为“与‘John’节点通过‘likes’关系连接的‘Person’节点”,并且去除其中的重复节点。
7. 使用限制和排序
使用LIMIT和ORDER BY命令限制和排序查询结果。例如,要查找所有“Person”节点,并按照年龄从小到大排序,返回前5个结果,可以使用以下命令:
```
MATCH (p:Person)
RETURN p
ORDER BY p.age ASC
LIMIT 5
```
这将返回所有“Person”节点,并按照“age”属性从小到大排序,返回前5个结果。
当涉及到数据建模时,有时候我们需要在图形数据库中创建虚拟节点和关系。虚拟节点和关系是不存储在数据库中的,但它们可以在查询中使用。以下是一些关于虚拟节点和关系的常见用法:
1. 创建虚拟节点
在Cypher查询中,您可以使用WITH子句创建虚拟节点。例如,以下查询将创建一个虚拟节点,该节点包含一个“name”属性和一个“age”属性:
```
WITH {name: 'John', age: 30} AS person
RETURN person
```
这将返回一个包含“name”和“age”属性的虚拟节点。
2. 创建虚拟关系
在Cypher查询中,您可以使用MERGE命令创建虚拟关系。例如,以下查询将创建一个虚拟关系,该关系连接了两个虚拟节点:
```
WITH {name: 'John', age: 30} AS person1, {name: 'Jane', age: 25} AS person2
MERGE (person1)-[:FRIENDS_WITH]->(person2)
RETURN person1, person2
```
这将返回两个包含“name”和“age”属性的虚拟节点,并创建一个虚拟关系,该关系连接这两个节点。
3. 使用虚拟节点和关系进行查询
在Cypher查询中,您可以使用虚拟节点和关系进行查询。例如,以下查询将返回所有匹配条件为“与虚拟节点‘John’通过‘FRIENDS_WITH’虚拟关系连接的节点”:
```
WITH {name: 'John', age: 30} AS person
MATCH (person)-[:FRIENDS_WITH]->(p:Person)
RETURN p
```
这将返回所有与虚拟节点“John”通过虚拟关系“FRIENDS_WITH”连接的“Person”节点。文章来源地址https://uudwc.com/A/201G1