neo4j-查询示例
- 查找名为"Cloud Atlas"的电影
match(cloudAtlas {title:"Cloud Atlas"}) return cloudAtlas
- 查找1990年-2000年发行的电影的名称
match(movies:Movie) where movies.released > 1990 and movies.released <2000 return movies.title
- 查找"Tom"参演过的电影,返回电影名,tom,关系
match(ps:Person {name:"Tom"})-[ac:acted_in]->(movie:Movie) return ps,ac,movie.title
- 查找谁导演了电影"Cloud Atlas"
match(ps:Person)-[:directed]->(movie:Movie {title:"Cloud Atlas"}) return ps.name
- 查找与"tom"同出演过电影的人
match(tom:Person {name:"Tom"}) -[:acted_in]->(m:Movie)<-[:acted_in]-[other:Person] return other.name
- 查找与电影"Cloud Atlas"相关的所有人
match (people:Person) -[relatedTo]-(:Movie {title:"Cloud Atlas"})
return people.name, Type(relatedTo),relatedTo
Type 返回关系的标签,比如是参演了电影还是导演了电影还是监制.而 relatedTo 返回的是关系的属性
这里所说的标签,就是书里所说的类型
执行过程:
首先匹配节点类型为Person类型的节点,然后再匹配节点类型为Movie类型,且节点属性title为Cloud Atlas的电影节点
最后匹配他们之间的所有关系,返回的结果是三列,对应返回的字段
╒══════════════════╤═════════════════╤══════════════════════════════════════════════════════════════════════╕
│"people.name" │"Type(relatedTo)"│"relatedTo" │
╞══════════════════╪═════════════════╪══════════════════════════════════════════════════════════════════════╡
│"Jessica Thompson"│"REVIEWED" │{"summary":"An amazing journey","rating":95} │
├──────────────────┼─────────────────┼──────────────────────────────────────────────────────────────────────┤
│"Jim Broadbent" │"ACTED_IN" │{"roles":["Vyvyan Ayrs","Captain Molyneux","Timothy Cavendish"]} │
├──────────────────┼─────────────────┼──────────────────────────────────────────────────────────────────────┤
│"Halle Berry" │"ACTED_IN" │{"roles":["Luisa Rey","Jocasta Ayrs","Ovid","Meronym"]} │
├──────────────────┼─────────────────┼──────────────────────────────────────────────────────────────────────┤
│"Lilly Wachowski" │"DIRECTED" │{} │
├──────────────────┼─────────────────┼──────────────────────────────────────────────────────────────────────┤
│"Tom Tykwer" │"DIRECTED" │{} │
├──────────────────┼─────────────────┼──────────────────────────────────────────────────────────────────────┤
│"Hugo Weaving" │"ACTED_IN" │{"roles":["Bill Smoke","Haskell Moore","Tadeusz Kesselring","Nurse Noa│
│ │ │kes","Boardman Mephi","Old Georgie"]} │
├──────────────────┼─────────────────┼──────────────────────────────────────────────────────────────────────┤
│"Tom Hanks" │"ACTED_IN" │{"roles":["Zachry","Dr. Henry Goose","Isaac Sachs","Dermot Hoggins"]} │
├──────────────────┼─────────────────┼──────────────────────────────────────────────────────────────────────┤
│"David Mitchell" │"WROTE" │{} │
├──────────────────┼─────────────────┼──────────────────────────────────────────────────────────────────────┤
│"Lana Wachowski" │"DIRECTED" │{} │
├──────────────────┼─────────────────┼──────────────────────────────────────────────────────────────────────┤
│"Stefan Arndt" │"PRODUCED" │{} │
└──────────────────┴─────────────────┴──────────────────────────────────────────────────────────────────────┘
- 查找与演员"Kevin Bacon" 存在4条及以内关系的任何演员和电影
match(people:People {name:"Kevin Bacon"}) - [*1..4] - (something)
return distinct something
执行过程:
首先匹配节点类型为People,属性name为Kevin Bacon的节点,然后将关系深度限制为从1到4再进行遍历,最后返回匹配的所有节点(去重)
- 查找与演员Kevin Bacon与Meg Ryan之间的最短路径
match p= shortestPath((:Person {name:"Kevin Bacon"}) -[*]- (:Person {name:"Meg Ryan"})) return p
shortestPath 方法是返回找出返回的所有路径中最短的一条
关系推荐小案例
比如要为Tom推荐新的合作伙伴,一个比较好的办法就是通过认识Tom的人的人脉来寻找新的合作伙伴
分析:
- 先找到Tom还没有合作过的演员,但Tom的合作伙伴曾经与其合作过
- 找到一个可以向Tom介绍新合作伙伴的人 或者说 找到一个可以向新合作伙伴介绍Tom的人
- 查找没有与Tom合作过的演员
match(tom:Person {name:"Tom Hanks"}) -[:ACTED_IN]->(m:Movie) <-[:ACTED_IN]-(middleman:Person),
(middleman:Person)-[:ACTED_IN]->(n:Movie)<-[:ACTED_IN]-(new_friend:Person)
where not (tom) -[:acted_in]->(n)
return new_friend as new , count(*) as Strength
order by Strength desc
╒═════════════════════════════════════════════╤══════════╕
│"new" │"Strength"│
╞═════════════════════════════════════════════╪══════════╡
│{"name":"Tom Hanks","born":1956} │12 │
├─────────────────────────────────────────────┼──────────┤
│{"name":"Zach Grenier","born":1954} │5 │
├─────────────────────────────────────────────┼──────────┤
├─────────────────────────────────────────────┼──────────┤
│{"name":"Jack","born":1962} │5 │
├─────────────────────────────────────────────┼──────────┤
分析:
count(*) 是新伙伴与中间人合作的次数
然后根据合作的次数进行排序
- 找人将Tom介绍给Jack
match(tom:Person {name:"Tom"}) -[:ACTED_IN] -> (m:Movie) <-[:ACTED_IN] - (middleman:Person),
(middleman:Person) -[:ACTED_IN] -> (n:Movie) <-[:ACTED_IN] - (jack:Person {name:"Jack"})
return tom,m,middleman,n,jack
清空数据库
注意有关系存在的节点,必须要清除关系后才能清除节点,或者同时清除都可以,这就相当于mysql中的外键联系,必须要删除外键后才能删除数据
下面演示删除所有Person,Movie节点及其所有关系
match(a:Person),(m:Movie) optional match (a)-[r1]-(), (m) - [r2] - () delete r1,r2,a,m
节点写(),代表任何类型的节点.
关系没有箭头,代表任何方向的关系.
关系没有写类型,代表存在的任何关系
清空数据之后,如果想要确认是否都删除完毕,可以使用全量查询检测一下
match(n) return (n) 返回所有类型的所有节点
neo4j-查询示例的更多相关文章
- Elasticsearch .Net Client NEST 多条件查询示例
Elasticsearch .Net Client NEST 多条件查询示例 /// <summary> /// 多条件搜索例子 /// </summary> public c ...
- NHibernate查询示例合集
基本查询 复杂查询示例 /// <summary> /// 获取自定义表单数据中属于部门的部分 /// </summary> /// <param name=&quo ...
- MyBatis 查询示例
环境搭建 数据库schema 1)datasource.xml配置 <?xml version="1.0" encoding="UTF-8"?> & ...
- spring boot - 整合jpa多对对关系保存和查询示例
pojo: package com.example.zs.springDataJpa; import org.hibernate.annotations.Proxy; import javax.per ...
- Elasticsearch 邻近查询示例
Elasticsearch 邻近查询示例(全切分分词) JAVA API方式: SpanNearQueryBuilder span = QueryBuilders.spanNearQuery(); s ...
- Accessoft-日期区间段查询示例,开始日期至截止日期区段查询
Accessoft-日期区间段查询示例,开始日期至截止日期区段查询 实现功能效果如下: 示例查询开始日期为2017年3月15日到2017年3月16日的内容: sql查询语句如下: SELECT Inf ...
- SQL Server-简单查询示例(十一)
前言 本节我们讲讲一些简单查询语句示例以及需要注意的地方,简短的内容,深入的理解,Always to review the basics. EOMONTH 在SQL Server 2012的教程示例中 ...
- Neo4j 查询已经创建的索引与约束
在Neo4j 2.0之后为cypher语法增加了一些类似于DDL的语法,能够自己创建索引,约束等等. 有如下的方法可以查询到当前图数据库的索引数量: neo4j-shell 使用:index –ind ...
- Spring SimpleJdbcTemplate查询示例
这里有几个例子来说明如何使用SimpleJdbcTemplate query()方法来查询或从数据库中提取数据.在 JdbcTemplate query() 方法,需要手动转换返回的结果转换为一个目标 ...
- neo4j查询语句
一:查询 比较操作: = <> < > <= >= 布尔操作: AND OR NOT XOR 1.把节点的前两个字为"提示"的节点去除" ...
随机推荐
- Oracle SQL——如何用一个表的数据更新另一个表中的数据
背景 一次处理数据的过程中,需要将表A(源表)的数据更新到表B(目标表)中 前提 两张表一定要有关联字段 使用关联字段联查两张表时,两张表关系必须满足条件:目标表和源表的表间关系一定是多对一或者一对一 ...
- nodeJs学习-14 mysql数据库学习、Navicat管理工具
数据库: MySQL 免费.性能非常不错 缺点:集群.容灾稍微弱一点 Oracle 收费.大型应用.金融级.性能非常不错.集群.容灾非常强 缺点:贵 mySQL安装教程--nodeJsz智能社视频 ...
- Docker初步了解 2016-10-30 20:46 279人阅读 评论(31) 收藏
什么是docker? Docker是一个开源的引擎,可以轻松的为任何应用创建一个轻量级的.可移植的.自给自足的容器. Docker本质上是一种软件,让用户创建镜像(很像虚拟机的模板),并且随后在容器里 ...
- 【C++】为什么构造函数没有返回值?(转载)
为什么构造函数没有返回值? 意见(1) 我认为构造函数隐含的返回值就是this,因为构造函数是在类的对象产生时自动调用.构造函数被调用也就意味着产生了一个对象,而this指针是与对象实体相关联的, ...
- docker images列出镜像
命令:docker images Usage: docker images [OPTIONS] [REPOSITORY[:TAG]] List images Options: -a, --all Sh ...
- 2017 ACM/ICPC Asia Regional Shenyang Online:number number number hdu 6198【矩阵快速幂】
Problem Description We define a sequence F: ⋅ F0=0,F1=1;⋅ Fn=Fn−1+Fn−2 (n≥2). Give you an integer k, ...
- Python基础:15私有化
默认情况下,属性在Python 中都是“public”. 1:双下划线(__) Python 为类元素(属性和方法)的私有性提供初步的形式.由双下划线开始的属性在运行时被“混淆”,所以直接访问是不允许 ...
- Oracle函数——COALESCE
COALESCE 含义:COALESCE是一个函数, (expression_1, expression_2, ...,expression_n)依次参考各参数表达式,遇到非null值即停止并返回该值 ...
- python selenium 处理悬浮窗口(baidu tj_more)
python selenium 处理悬浮窗口 from selenium.webdriver.common.action_chains import ActionChainsActionChains( ...
- Android 自定义界面的弹出框(可输入数据)
上午写了一篇博文,介绍了如何定义从屏幕底部弹出PopupWindow,写完之后,突然想起之前写过自定义内容显示的弹出框,就随手写了两个实例,分享出来: 第一种实现方式:继承Dialog 1.1 线定义 ...