neo4j--Cypher语法练习(WITH、 FOREACH、Aggregation、UNWIND、UNION、CALL)

本文详细介绍了Neo4j的Cypher查询语言,包括WITH语句的使用,如过滤聚合结果、排序和限制路径搜索;FOREACH语句在遍历和更新数据方面的应用;Aggregation功能,如COUNT、SUM、AVG等聚合函数的计算;以及UNWIND、UNION、CALL等高级操作。通过实例展示了如何在Neo4j数据库中进行复杂的查询和数据处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.15 WITH

WITH语句将分段的查询部分连接在一起,查询结果从一部分以管道形式传递给另外一部分作为开始点。

使用WITH可以在将结果传递到后续查询之前对结果进行操作。操作可以是改变结果的形式或者数量。WITH的一个常见用法就是限制传递给其他MATCH语句的结果数。通过结合ORDER BY和LIMIT,可获取排在前面的X个结果。

1.15.1  过滤聚合函数结果

      聚合的结果必须要通过WITH语句传递才能进行过滤。

MATCH (david { name: 'Tom Hanks' })--()--(otherPerson)

WITH otherPerson, count(*) AS foaf

WHERE foaf > 1

RETURN otherPerson

1.15.2 在collect前对结果排序

可以在将结果传递给collect函数之前对结果进行排序,这样就可以返回排过序的列表。

MATCH (n)

WITH n

ORDER BY n.name DESC LIMIT 3

RETURN collect(n.name)

1.15.3 限制路径搜索的分支

可以限制匹配路径的数量,然后以这些路径为基础再做任何类似的有限制条件的搜索。

MATCH (n { name: 'Tom Hanks' })--(m)

WITH m

ORDER BY m.name DESC LIMIT 1

MATCH (m)--(o)

RETURN o.name

1.16 FOREACH

FOREACH语句用于循环遍历结果集列表,然后做一些操作。

列表(lists)和路径(paths)是Cypher中的关键概念。可以使用FOREACH来更新其中的数据。它可以在路径或者聚合的列表的每个元素上执行更新命令。FOREACH括号中的变量是与外部分开的,这意味着FOREACH中创建的变量不能用于该语句之外。

在FOREACH括号内,可以执行任何的更新命令,包括CREATE,CREATE UNIQUE,DELETE和FOREACH。如果希望对列表中的每个元素执行额外的MATCH命令,使用UNWIND命令更合适。

1.16.1 标记路径上的所有节点

这个查询将设置路径上所有节点的marked属性为true值。

MATCH p = (root { name: 'root' })-[r]-(A)

FOREACH (n IN nodes(p)| SET n.marked = <

Neo4j中,WITH语句可以在将结果传递到后续查询之前对结果进行操作。一个常见的用法是限制传递给其他MATCH语句的结果数。通过结合ORDER BY和LIMIT,可以获取排在前面的特定数量的结果。例如,使用WITH语句可以对查询结果进行排序和限制并返回一个集合。下面是一个示例查询: ``` MATCH (n) WITH n ORDER BY n.name DESC LIMIT 3 RETURN collect(n.name) ``` 这个查询将返回按照姓名降序排序的前三个节点的名称集合。返回值可能是["Emil", "David", "Ceasar"]。 另外,WITH语句还可以在路径搜索中使用。例如,可以使用WITH语句获取与特定节点具有外向关系的其他节点,并按照名称降序排序,然后限制返回结果的数量。下面是一个示例查询: ``` MATCH (n { name: 'Anders' })--(m) WITH m ORDER BY m.name DESC LIMIT 1 MATCH (m)--(o) RETURN o.name ``` 这个查询将返回与名为'Anders'的节点具有关系的节点中,按名称降序排序的第一个节点的名称。返回值可能是"Bossman"。 需要注意的是,在FOREACH语句中,可以执行任何更新命令,包括CREATE、CREATE UNIQUE、DELETE和FOREACH。如果想要对列表中的每个元素执行额外的MATCH命令,更适合使用UNWIND命令。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [neo4j--Cypher语法练习WITHFOREACHAggregationUNWINDUNIONCALL)](https://blog.csdn.net/qq_37503890/article/details/101565515)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* [neo4j语法-with](https://blog.csdn.net/qq_17616169/article/details/115390500)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值