neo4j cypher查询

1. 创建节点和关系

 

使用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

原文地址:https://blog.csdn.net/m0_73332400/article/details/131133201

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请联系站长进行投诉反馈,一经查实,立即删除!

上一篇 2023年09月25日 12:43
Unity中画2D图表(5)——给定一系列散点,拟合出一条曲线
下一篇 2023年09月25日 12:47