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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/363182.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用C#調用外部程式或是執行DOS命令

在.NET裡要如何調用外部程式呢?? 在.net裡&#xff0c;提供了Process類&#xff0c;提供我們強大的調用外部工具功能&#xff0c;並透過重新導向輸入與輸出&#xff0c;可以取得執行結果&#xff0c;下面就用一個例子來示範在一個WinForm裡輸入一個Dos命令&#xff0c;然後呼…

flex 学习篇 ---- 导航类容器

导航类容器需要使用<mx:ViewStack />。可以直接从ui设计器中拉控件过去舞台或者手动敲代码。 导航类容器就是相当于创建了一个菜单&#xff0c;然后按每个选项都可以进入到不同的页面。 创建了<mx:ViewStack>之后需要为它指定id号。 <mx:ViewStack id"vi…

SQLiteOpenHelper+ContentProvider的使用

效果图&#xff1a; PetDbHelper package com.example.admin.pets;import android.content.Context;import android.database.sqlite.SQLiteDatabase;import android.database.sqlite.SQLiteOpenHelper;import com.example.admin.pets.PetContract.PetEntry;public class PetDb…

[Mac入门] 如果更快的打开程序或文件

今天有位网友问我在Windows下可以用CtrlR快速打开程序/文件夹等&#xff0c;在Mac下有没有相类似的功能&#xff1f;本文将介绍一些我的一般做法。 1.Windows下的CtrlR是什么&#xff1f; 我打算从解释CtrlR开始说起&#xff0c;希望朋友们别嫌烦&#xff5e;。Windows下系统全…

Install Shield制作安装包技巧(SQL篇)

1、检查SQL Server是否安装prototype CheckSQL(); function CheckSQL()BOOL bSuccess;NUMBER nType, nvSize;STRING szVer; STRING szSetupVer, szSetupPath;beginRegDBSetDefaultRoot ( HKEY_LOCAL_MACHINE );szSetupPath "SOFTWARE\\Microsoft\\MSSQLServer\\Setup&quo…

ActiveMQ –经纪人网络解释–第4部分

在前面的第3部分中 &#xff0c;我们已经看到ActiveMQ如何帮助将远程使用者与本地使用者区分开来&#xff0c;这有助于确定从消息生产者到使用者的较短路径。 在第4部分中&#xff0c;我们将研究如何在远程代理上负载均衡并发使用者。 让我们考虑一些高级配置&#xff0c;以平…

总结CSS3新特性(选择器篇)

CSS3新增了嗯- -21个选择器,脚本通过控制台在这里运行; ~: p ~ p {color : red;/*此条规则将用于p后边所有的p...就是除了第一个p的所有p,规则同p:not(:nth-of-type(1)),但是权重要低于后者*/} [attribute^value]: 选择该属性以特定值开头的元素 [attribute$value]: 选择该属…

js获取地址栏信息

设置或获取对象指定的文件名或路径。 window.location.pathname例&#xff1a;http://localhost:8086/topic/index?topicId361alert(window.location.pathname); 则输出&#xff1a;/topic/index设置或获取整个 URL 为字符串。window.location.href例&#xff1a;http://local…

在NIO.2中使用文件和目录

在先前的文章中&#xff0c;我讨论了文件和目录的创建&#xff08; 创建文件和目录 &#xff09;以及选择&#xff08; 列出和过滤目录内容 &#xff09;。 采取的最后一个合乎逻辑的步骤是探索我们如何使用它们以及如何使用它们。 这是库的一部分&#xff0c;它经过了重新设计…

工作流的设计,业务流程图的绘制与编辑,工作流软件,工作流源代码组件库,开发平台,开发引擎...

基于业务流程的工作流系统在当前的软件工业中占据着非常重要的部分&#xff0c;开发此类系统, 最困难的部分就是业务流程建模和电子表单的可视化界面部分,这部分界面要求有快速的响应时间, 完善的逻辑关系,以及根据需求不断变化而必须具备的灵活编辑功能. E-Form可视化图形源码…

upload file more than 4MB

http://www.websupergoo.com/abcupload.net-1.htm 转载于:https://www.cnblogs.com/stevengeng/archive/2004/12/30/84274.html

Ajax全接触(1)

Ajax全称&#xff1a;Asynchronous JavaScript and XML(异步的JavaScript和XML) .Ajax不是某种编程语言 是一种在无需重新加载整个网页的情况之下能够更新部分网页的技术。 后面引入XMLHttpRequest对象用于后台和服务器交换数据&#xff0c;可以在不重新加载整个页面的前提下…

关于hibernate字段映射@colunm出现的问题以及jpa驼峰大写转_小写的问题探究

关于hibernate字段映射colunm出现的问题以及jpa驼峰大写转_小写的问题探究2018年04月24日 15:47:26 守望dfdfdf 阅读数&#xff1a;735 标签&#xff1a; colunmhibernate表映射实体类 更多个人分类&#xff1a; 工作 问题编辑版权声明&#xff1a;本文为博主原创文章&#xff…

窗口模版

窗口模版 1. 定义窗口模版的ID 在wgui_categories_defs.h文件中有枚举enum MMI_CATEGORY_ID_LIST 首先要在MMI_CATEGORY_ID_LIST中添加窗口模版的ID&#xff0c;例如&#xff1a; MMI_CATEGORY36_ID 2. 控件坐标和控件数组的定义 CustCoordinates.c (plutommi"…

玩Java 8 – Lambda,路径和文件

我最近需要读取一堆文件&#xff0c;而不是仅仅抓住我和可能是大多数开发人员拥有的旧FileUtils.java&#xff0c;然后从一个项目复制到另一个项目&#xff0c;我决定快速了解其他方法。 是的&#xff0c;我知道有Commons IO和Google IO &#xff0c;我为什么还要打扰&#xf…

vs.net2003无法打开.NET的Web应用服务

今天想打开web项目时提示&#xff1a;Visual Studio .NET 已检测到指定的Web服务器运行的不是ASP.NET 1.1版。您将无法运行ASP.NET Web应用原因大概是自己原来安装VS.NET2003时没有安装IIS&#xff0c;后来才装上的。自己重新安装了.NET Framework1.1还是不行。后来找到了找这个…

vue组件-使用插槽分发内容(slot)

slot--使用插槽分发内容&#xff08;位置、槽口&#xff1b;作用: 占个位置&#xff09; 官网API&#xff1a; https://cn.vuejs.org/v2/guide/components.html#使用插槽分发内容 使用组件时&#xff0c;有时子组件不知道会收到什么内容&#xff0c;这是由父组件决定的。 一…

LeetCode 上最难的链表算法题,没有之一!

题目来源于 LeetCode 第 23 号问题&#xff1a;合并 K 个排序链表。 该题在 LeetCode 官网上有关于链表的问题中标注为最难的一道题目&#xff1a;难度为 Hard &#xff0c;通过率在链表 Hard 级别目前最低。 题目描述 合并 k 个排序链表&#xff0c;返回合并后的排序链表。请分…

处理Akka应用程序中的每个事件

这里的事件&#xff0c;那里的事件&#xff0c;到处都是事件。 发布有关检查每一项Akka事件最终都能找到归宿的信息。 Akka和基于事件的反应式应用程序是创建软件的新方法。 在当前基于Scala的项目中&#xff0c;我们非常密集地使用Akka。 事件非常适合我们的用例&#xff0c;…

js设置select列表中特定项为选中状态

设置select中text"paraText"的第一个Item为选中 function jsSelectItemByValue(objSelect,objItemText) { //判断是否存在 var isExit false; for(var i0;i<objSelect.options.length;i) { if(objSelect.options[i].text objItemText) { objSelect.options[i].s…