在发布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相关推荐

  1. unwind neo4j_Neo4j 2.1:传递节点ID与UNWIND

    unwind neo4j 当Neo4j 2.1发布时,我们将拥有UNWIND子句,该子句使处理事物集合变得更加容易. 在我的有关创建邻接矩阵的博客文章中,我们想要显示按字母顺序排列的前5个见面组中有多 ...

  2. 【spring boot】url中传递session id

    前言 tomcat spring boot url中传递session id 默认情况,session id 是通过 cookie 传递的. 使用 cookie 传递 session id 时,默认的 ...

  3. Element ui tree树形控件获取当前节点id和父节点id

    低版本Element ui tree树形控件获取当前节点id和父节点id的方法:点击查看 最新版本Element ui tree树形控件获取当前节点id和父节点id教程: 1.找到node_modul ...

  4. elementui tree获取父节点_vue_elementUI_ tree树形控件 获取选中的父节点ID

    一,  vue_elementUI_ tree树形控件 1.1默认点击tree节点的第一个(注意不是checked选中) :expand-on-click-node="false" ...

  5. 【neo4j】去除重复节点

    问题 我们在使用neo4j批量导入数据的时候,有可能同一个命令导入多次,那么就会存在重复数据,这个时候怎么去除重复数据呢? MATCH (n:Location {city:'Boston'}) RET ...

  6. 如何找到SAP CRM One Order节点ID对应的描述信息(名称)

    in our offline initial downloader, you see hard code for object type: 在SAP CRM One Order代码里,到处可以看到这种 ...

  7. Spring Data Neo4j解除两个节点之间的关系

    问题 需要解除两个Node之间的某种关系 思路 利用@Query注解,在其中运行Cypher的解除两个Node之间关系语句即可. Repository @Query("MATCH (:MyN ...

  8. MySQL根据父节点id查询所有子节点

    方法一 <!--根据id查询子节点--><select id="sonId" parameterType="java.lang.String" ...

  9. vue事件委托传递节点防止向下传递穿透

    例如: <li @click="popSelect($event)"><span>Bank Country</span><input ty ...

最新文章

  1. debian手动安装java两种方法
  2. 武侠q传服务器维护,《武侠Q传》就服务器人多过载致歉玩家赞有诚意
  3. MySQL查看SQL语句执行效率和mysql几种性能测试的工具
  4. python module是干什么的_如何最简单、通俗地理解Python的模块?
  5. php对接钉钉_php实现钉钉业务报警机器人
  6. HTML音乐播放没声音,网页没有声音但系统显示有声音怎么回事?如何解决?
  7. linux中的变量前加__user,linux中的环境变量,别名,变量传递和函数块
  8. agx 安装ros opencv_(五)树莓派3开发环境搭建——5.Android手机端与robot端ROS网络通信...
  9. for 循环 与forEach 里面return 的区别
  10. 华为手机坏了数据怎么导出_更换手机怎么把旧手机便签里的内容怎么全部导出到电脑...
  11. 苹果x和xs买哪个好_苹果12和苹果11哪个值得买-苹果12和11哪个更值得买
  12. atitit. it软件项目管理---自己的员工,雇佣军、援军,混合的员工 杂牌 人员管理架构
  13. 浅谈IT隔离电源系统在医疗场所的接地设计研究与应用
  14. 计算机关闭窗口可以使用alt,电脑关闭窗口快捷键
  15. 高通核心板,高通骁龙410系列 MSM8916
  16. 鸿蒙音频低延迟,鸿蒙OS 音频播放开发指导
  17. 如何下载B站(bilibili)的视频
  18. linux+查看磁带信息,15 条实用 Linux/Unix 磁带管理命令
  19. Windows10安装Ubuntu子系统+配置SSH连接+安装xfce4图形界面+配置xrdc远程桌面连接
  20. C++检测内存泄漏方法

热门文章

  1. Android之ZXing扫描二维码以及生成二维码
  2. html画等边三角形,前台面试:使用CSS画一个等边三角形
  3. redis主从复制部署策略+jedis设置主从
  4. redis集群3种模式
  5. hibernate左连接查询时在easyUI的dataGrid中有些行取值为空的解决办法
  6. micrometer_具有InlfuxDB的Spring Boot和Micrometer第2部分:添加InfluxDB
  7. fork/join和线程池_从fork-join /线程池调用的Singelton bean中的访问spring请求范围缓存...
  8. raid重构原理_5个重构原理示例
  9. io.realm:rea_使Java具有响应性的框架和工具包:RxJava,Spring Reactor,Akka和Vert.x概述...
  10. layui绑定json_认识定制:JSON绑定概述系列