Neo4j 2.1:传递节点ID与UNWIND
在发布Neo4j 2.1时,我们将具有UNWIND子句,该子句使处理事物集合更加容易。
在我的有关创建邻接矩阵的博客文章中,我们想要显示按字母顺序排列的前5个见面组中有多少人,然后检查其他各组中有多少人。
没有UNWIND子句,我们必须这样做:
MATCH (g:Group)
WITH g
ORDER BY g.name
LIMIT 5WITH COLLECT(id(g)) AS groupsMATCH (g1) WHERE id(g1) IN groups
MATCH (g2) WHERE id(g2) IN groupsOPTIONAL MATCH path = (g1)<-[:MEMBER_OF]-()-[:MEMBER_OF]->(g2)RETURN g1.name, g2.name, CASE WHEN path is null THEN 0 ELSE COUNT(path) END AS overlap
在这里,我们获得了前5个组,将其ID放入集合中,然后通过背对背具有节点ID查找的MATCH来创建组的笛卡尔积。
如果不是在“组”中传递节点ID,而是传递节点,然后在MATCH步骤中使用节点ID,那么我们将进行完整的节点扫描,随着存储的增长,它变得非常慢。
例如,此版本将非常慢:
MATCH (g:Group)
WITH g
ORDER BY g.name
LIMIT 5WITH COLLECT(g) AS groupsMATCH (g1) WHERE g1 IN groups
MATCH (g2) WHERE g2 IN groupsOPTIONAL MATCH path = (g1)<-[:MEMBER_OF]-()-[:MEMBER_OF]->(g2)RETURN g1.name, g2.name, CASE WHEN path is null THEN 0 ELSE COUNT(path) END AS overlap
这是原始查询的输出:
+-------------------------------------------------------------------------------------------------------------+
| g1.name | g2.name | overlap |
+-------------------------------------------------------------------------------------------------------------+
| "Big Data Developers in London" | "Big Data / Data Science / Data Analytics Jobs" | 17 |
| "Big Data Jobs in London" | "Big Data London" | 190 |
| "Big Data London" | "Big Data Developers in London" | 244 |
| "Cassandra London" | "Big Data / Data Science / Data Analytics Jobs" | 16 |
| "Big Data Jobs in London" | "Big Data Developers in London" | 52 |
| "Cassandra London" | "Cassandra London" | 0 |
| "Big Data London" | "Big Data / Data Science / Data Analytics Jobs" | 36 |
| "Big Data London" | "Cassandra London" | 422 |
| "Big Data Jobs in London" | "Big Data Jobs in London" | 0 |
| "Big Data / Data Science / Data Analytics Jobs" | "Big Data / Data Science / Data Analytics Jobs" | 0 |
| "Big Data Jobs in London" | "Cassandra London" | 74 |
| "Big Data Developers in London" | "Big Data London" | 244 |
| "Cassandra London" | "Big Data Jobs in London" | 74 |
| "Cassandra London" | "Big Data London" | 422 |
| "Big Data / Data Science / Data Analytics Jobs" | "Big Data London" | 36 |
| "Big Data Jobs in London" | "Big Data / Data Science / Data Analytics Jobs" | 20 |
| "Big Data Developers in London" | "Big Data Jobs in London" | 52 |
| "Cassandra London" | "Big Data Developers in London" | 69 |
| "Big Data / Data Science / Data Analytics Jobs" | "Big Data Jobs in London" | 20 |
| "Big Data Developers in London" | "Big Data Developers in London" | 0 |
| "Big Data Developers in London" | "Cassandra London" | 69 |
| "Big Data / Data Science / Data Analytics Jobs" | "Big Data Developers in London" | 17 |
| "Big Data London" | "Big Data Jobs in London" | 190 |
| "Big Data / Data Science / Data Analytics Jobs" | "Cassandra London" | 16 |
| "Big Data London" | "Big Data London" | 0 |
+-------------------------------------------------------------------------------------------------------------+
25 rows
如果使用UNWIND,则不再需要传递节点ID,而是可以将节点收集到一个集合中,然后将其分解为笛卡尔积:
MATCH (g:Group)
WITH g
ORDER BY g.name
LIMIT 5WITH COLLECT(g) AS groupsUNWIND groups AS g1
UNWIND groups AS g2OPTIONAL MATCH path = (g1)<-[:MEMBER_OF]-()-[:MEMBER_OF]->(g2)RETURN g1.name, g2.name, CASE WHEN path is null THEN 0 ELSE COUNT(path) END AS overlap
没有明显更少的代码,但是我认为使用UNWIND可以使查询的意图更加清晰。
我很期待看到一旦2.1是GA,UNWIND员工就会发挥创新的作用。
翻译自: https://www.javacodegeeks.com/2014/06/neo4j-2-1-passing-around-node-ids-vs-unwind.html
Neo4j 2.1:传递节点ID与UNWIND相关推荐
- unwind neo4j_Neo4j 2.1:传递节点ID与UNWIND
unwind neo4j 当Neo4j 2.1发布时,我们将拥有UNWIND子句,该子句使处理事物集合变得更加容易. 在我的有关创建邻接矩阵的博客文章中,我们想要显示按字母顺序排列的前5个见面组中有多 ...
- 【spring boot】url中传递session id
前言 tomcat spring boot url中传递session id 默认情况,session id 是通过 cookie 传递的. 使用 cookie 传递 session id 时,默认的 ...
- Element ui tree树形控件获取当前节点id和父节点id
低版本Element ui tree树形控件获取当前节点id和父节点id的方法:点击查看 最新版本Element ui tree树形控件获取当前节点id和父节点id教程: 1.找到node_modul ...
- elementui tree获取父节点_vue_elementUI_ tree树形控件 获取选中的父节点ID
一, vue_elementUI_ tree树形控件 1.1默认点击tree节点的第一个(注意不是checked选中) :expand-on-click-node="false" ...
- 【neo4j】去除重复节点
问题 我们在使用neo4j批量导入数据的时候,有可能同一个命令导入多次,那么就会存在重复数据,这个时候怎么去除重复数据呢? MATCH (n:Location {city:'Boston'}) RET ...
- 如何找到SAP CRM One Order节点ID对应的描述信息(名称)
in our offline initial downloader, you see hard code for object type: 在SAP CRM One Order代码里,到处可以看到这种 ...
- Spring Data Neo4j解除两个节点之间的关系
问题 需要解除两个Node之间的某种关系 思路 利用@Query注解,在其中运行Cypher的解除两个Node之间关系语句即可. Repository @Query("MATCH (:MyN ...
- MySQL根据父节点id查询所有子节点
方法一 <!--根据id查询子节点--><select id="sonId" parameterType="java.lang.String" ...
- vue事件委托传递节点防止向下传递穿透
例如: <li @click="popSelect($event)"><span>Bank Country</span><input ty ...
最新文章
- debian手动安装java两种方法
- 武侠q传服务器维护,《武侠Q传》就服务器人多过载致歉玩家赞有诚意
- MySQL查看SQL语句执行效率和mysql几种性能测试的工具
- python module是干什么的_如何最简单、通俗地理解Python的模块?
- php对接钉钉_php实现钉钉业务报警机器人
- HTML音乐播放没声音,网页没有声音但系统显示有声音怎么回事?如何解决?
- linux中的变量前加__user,linux中的环境变量,别名,变量传递和函数块
- agx 安装ros opencv_(五)树莓派3开发环境搭建——5.Android手机端与robot端ROS网络通信...
- for 循环 与forEach 里面return 的区别
- 华为手机坏了数据怎么导出_更换手机怎么把旧手机便签里的内容怎么全部导出到电脑...
- 苹果x和xs买哪个好_苹果12和苹果11哪个值得买-苹果12和11哪个更值得买
- atitit. it软件项目管理---自己的员工,雇佣军、援军,混合的员工 杂牌 人员管理架构
- 浅谈IT隔离电源系统在医疗场所的接地设计研究与应用
- 计算机关闭窗口可以使用alt,电脑关闭窗口快捷键
- 高通核心板,高通骁龙410系列 MSM8916
- 鸿蒙音频低延迟,鸿蒙OS 音频播放开发指导
- 如何下载B站(bilibili)的视频
- linux+查看磁带信息,15 条实用 Linux/Unix 磁带管理命令
- Windows10安装Ubuntu子系统+配置SSH连接+安装xfce4图形界面+配置xrdc远程桌面连接
- C++检测内存泄漏方法
热门文章
- Android之ZXing扫描二维码以及生成二维码
- html画等边三角形,前台面试:使用CSS画一个等边三角形
- redis主从复制部署策略+jedis设置主从
- redis集群3种模式
- hibernate左连接查询时在easyUI的dataGrid中有些行取值为空的解决办法
- micrometer_具有InlfuxDB的Spring Boot和Micrometer第2部分:添加InfluxDB
- fork/join和线程池_从fork-join /线程池调用的Singelton bean中的访问spring请求范围缓存...
- raid重构原理_5个重构原理示例
- io.realm:rea_使Java具有响应性的框架和工具包:RxJava,Spring Reactor,Akka和Vert.x概述...
- layui绑定json_认识定制:JSON绑定概述系列