Neo4j 子句

```
MATCH (:Person { name: 'an' })-[r]->(:Persion)
RETURN type(r) // 返回关系的类型 如:r 就是 'KNOWS'
MATCH (wallstreet { title: 'Wall Street' })<-[:ACTED_IN|:DIRECTED]-(person)
RETURN person.name // 使用 “|” 匹配多个关系
```

一般情况下,节点之间的关系描述,夹杂空白字符或者是非文字字符的,但是 ` 使用可以解决这个问题

```merge(n{name:"李雷"})-[r:`IS HIS TEACHER`]->(m{name:"ma"})```

指定关系的深度,或者说是路径的长度

```

MATCH(n{name:"ma"})-[:KNOWS*2]-(m)return m  //degree 和path 为2
MATCH(n{name:"ma"})-[:KNOWS*1..2]-(m)return m //degree 和path 为 1 到 2
MATCH p = (n{name:"ma"})-[:KNOWS*2]-(m)return p
MATCH p = (n{name:"ma"})-[:KNOWS*1..2]-(m)return p
// 这两种会把 最长路径上的所有节点和关系都返回
```

设置不同的路径长度,返回的关系值是不同的

```

MATCH p = (n{name:"ma"})-[r:KNOWS]-(m)return r
// {}
MATCH p = (n{name:"ma"})-[r:KNOWS*1]-(m)return r
// [{"identity":1,"start":4,"end":1,"type":"KNOWS","properties":{}}] 4 ,1 为节点的 id
MATCH p = (n{name:"ma"})-[r:KNOWS*2]-(m)return r
// [{"identity":1,"start":4,"end":1,"type":"KNOWS","properties":{}},{"identity":0,"start":1,"end":3,"type":"KNOWS","properties":{"since":2011}}]
MATCH p = (n{name:"ma"})-[r:KNOWS*1..2]-(m)return r                                
// [{"identity":1,"start":4,"end":1,"type":"KNOWS","properties":{}}],
//[{"identity":1,"start":4,"end":1,"type":"KNOWS","properties":{}},{"identity":0,"start":1,"end":3,"type":"KNOWS","properties":{"since":2011}}]
MATCH p = (n{name:"an"})--(m)return id(m)  //返回 节点的 id
MATCH p = (n{name:"an"})--(m) where id(m) = 3 return m
```
```
Zero length paths

Using variable length paths that have the lower bound zero means that two variables can point to the same node. If the path length between two nodes is zero, they are by definition the same node. Note that when matching zero length paths the result may contain a match even when matching on a relationship type not in use.

```

使用变量表示路径,如果关系中有0 ,那么这两个变量指向的是同一个节点。如果两个节点之间的关系路径深度为0 ,那么这个两个节点其实是同一个节点。注意:如果匹配 0 长度时,即使没有指定关系类型,也只会返回一个结果(也就是节点自身)

如果返回或者过滤模式图中的路径,可以使用命名路径

```
MATCH p =(michael { name: 'Michael Douglas' })-->() RETURN p

```

如果关系不指定方向,那么就会返回节点两个方向(进/出)的关系。

```

match(n{name:"sun"}),(e{name:"ma"}),p = shortestPath((n)-[*..3]->(e))return p
// 利用shortestPath()函数 返回一个两个节点的最短路径。两个节点之间的关系,可以有方向,也没有不指定方向

```

使用where条件语句对结果进行过滤或者限定

```
match(n{name:"sun"}),(e{name:"ma"}),p = shortestPath((n)-[*..3]-(e))where NONE (r in relationships(p) where type(r) = 'KNOWS') return p
// none 貌似起到了not的作用。where限定了两个节点之间不能是 KNOWS 关系。
// type(r) 的返回值是 关系的类型。   relationships()函数返回路径中的关系                
match(n{name:"sun"}),(e{name:"ma"}),p = shortestPath((n)-[*..3]-(e)) return relationships(p)
//[{"identity":0,"start":1,"end":3,"type":"KNOWS","properties":{"since":2011}},{"identity":1,"start":4,"end":1,"type":"KNOWS","properties":{}}]                
match(n{name:"sun"}),(e{name:"ma"}),p = allShortestPaths((n)-[*..3]-(e)) return p
// allShortestPaths() 返回所有的路径?!                              
MATCH (n) WHERE id(n) IN [0, 3, 5] RETURN n
//id()可以返回节点,关系的id
optional match  当匹配的关系/节点,不存在时,返回Null
match(n{name:"ma"}) optional match(n)<-[r]-(e) return e
// null
distinct 如果匹配到多个结果,但是只返回一个
match(n)-[r]-(m)return r
// 会返回多个结果,这些结果里面可能有重复的
match(n)-[r]-(m)return distinct r
//返回多个结果,但是重复的只返回一次。
unwind //解包
match(n)where exists(n.klout)return n.name
// exists限定了,返回具有klout 属性的节点。
match(n) where n.name starts with 'E' return n.name
// ends with 以xx结尾
//contains 包含
match(n)where not n.name ends with 'e' return n.name
// not 放在where 之后,紧挨着 where
match(n)where n.name =~'E.+'return n
// 正则表达式

```

neo4j 学习-1的更多相关文章

  1. Neo4j学习笔记(1)——使用API编写一个Hello World程序

    项目的创建及配置 因为Neo4j依赖的jar包比较多,所以推荐使用Maven来管理. 首先创建一个Maven Project,添加依赖: <dependency> <groupId& ...

  2. Neo4j学习——基本操作(一)

    由于开始学习知识图谱,因此需要涉及到neo4j的使用一.介绍neo4j是一个图形数据库基于Java开发而成,因此需要配置jvm才可以运行配置请参考我前面的一篇blog:https://www.cnbl ...

  3. Neo4j学习笔记(1)——使用Java API实现简单的增删改查

    阅读目录 项目的创建及配置 使用嵌入式数据库 创建节点和关系 查询及更新 删除关系和节点 完整代码 参考资料 回到顶部 项目的创建及配置 因为Neo4j依赖的jar包比较多,所以推荐使用Maven来管 ...

  4. Neo4j 学习笔记(-)

    Neo4j 的使用说明(一)(基于V3.4.9) 下一篇(二):https://www.cnblogs.com/infoo/p/11947467.html 一.Neo4j简介 Neo4j是一个高性能的 ...

  5. Neo4j学习笔记(2)——数据索引

    和关系数据库一样,Neo4j同样可以创建索引来加快查找速度. 在关系数据库中创建索引需要索引字段和指向记录的指针,通过索引可以快速查找到表中的行. 在Neo4j中,其索引是通过属性来创建,便于快速查找 ...

  6. neo4j 学习笔记

    1.参考 https://blog.csdn.net/appleyk/article/category/7408344 系列文章 (不支持 spring boo 2.0 以下的,入门可做参考) 2.底 ...

  7. Neo4j学习笔记

    1. 环境搭建 正好最近同学有一台阿里云服务器借我玩,就尝试着在服务器上搭了Neo4j. 环境:CentOS Linux release 7.4.1708 (Core) 安装Java 安装Neo4j需 ...

  8. Neo4j学习案例【转】

    转自 打怪的蚂蚁 CSDN: https://blog.csdn.net/xgjianstart/article/details/77285334 neo4j有社区版本和企业版.社区版本是免费的,只支 ...

  9. neo4j 学习-2

    Neo4j 查询例句 MATCH (john {name: 'John'})-[:friend]->()-[:friend]->(fof) RETURN john.name, fof.na ...

随机推荐

  1. 【数据库】mysql的安装

    打开下载的mysql安装文件mysql-5.0.27-win32.zip,双击解压缩,运行“setup.exe”,出现如下界面 mysql安装向导启动,按“Next”继续 选择安装类型,有“Typic ...

  2. mysqldump的single-transaction

    先看一下--lock-tables和--lock-all-tables --lock-all-tables 一次性锁定所有数据库的所有表,在整个dump期间一直获取global read lock: ...

  3. PHP $_SERVER 祥细解读(有事例)

    为了看的更明白,添加上了事例 例如  'www.ceshiyuming.com/ceshi.php?p=123';Array(    [HOSTNAME] =>     [PATH] => ...

  4. CentOS 7安装和配置ssh

      1. 安装openssh-server yum install -y openssl openssh-server 2. 修改配置文件 用vim打开配置文件/etc/ssh/sshd_config ...

  5. BASIC-15_蓝桥杯_字符串对比

    示例代码: #include <stdio.h>#define N 10 int main(void){ int i = 0 ; int len1 = 0 , len2 = 0 , fla ...

  6. xcode编译失败

    iPhone自动化需要使用WDA.经过一段时间,再次编译,会出现WDA编译失败的问题,提示 The operation couldn't be completed. Unable to log in ...

  7. Missing Number @leetcode

    Given an array containing n distinct numbers taken from 0, 1, 2, ..., n, find the one that is missin ...

  8. Windows7下搭建Eclipse+Python开发环境

    机器: Windows7_x86_64 前提: 机器已成功安装Python2.7,并配置好环境变量. 步骤: 一.Eclipse的安装 Eclipse是基于java的一个应用程序,因此需要一个java ...

  9. 【Codeforces】CF 8 C Looking for Order(状压dp)

    题目 传送门:QWQ 分析 这种题不会做 吃枣药丸..... 想到状压已经经过的点. 然后更新时枚举两个点加进去. 复杂度$  {O(2^n \times n^2)}$. 凉凉. 真正的做法是每一个状 ...

  10. 全国城市空气质量实时数据(PM2.5)实时下载

    国家公布了“http://113.108.142.147:20035/emcpublish/”空气质量实时发布平台,WCF服务地址为“http://113.108.142.147:20035/EnvP ...