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. 【python】专用下划线标识符说明

    __xxx__:系统定义名字 __xxx:类中私有变量名 说明:__xxx看做“私有的”,在模块或者类外是不可以使用.

  2. 【Spring学习笔记-MVC-1.3】消息转换器HttpMessageConverter

    作者:ssslinppp       参考链接: SpringMVC源码剖析(五)-消息转换器HttpMessageConverter: http://my.oschina.net/lichhao/b ...

  3. 【Hibernate学习笔记-5】@Formula注解的使用

    ORM映射关系:注解方式 package org.crazyit.app.domain; import javax.persistence.*; import org.hibernate.annota ...

  4. 【ActiveMQ入门-10】ActiveMQ学习-通配符+异步接收

    通配符介绍: 一般情况下,我们使用层次结构的方式来组织队列,比如A.B.C.D,这样便于归类和管理.  我们也可以使用通配符来配置或是操作多个队列.  通配符有三个: .  用来分隔路径: * 用来匹 ...

  5. 如果安装提示缺少某vistal c++ 装完仍然报错,可以尝试

    https://www.lfd.uci.edu/~gohlke/pythonlibs/#mysql-python 从这个网站直接下载需要的包进行安装 来源 https://www.cnblogs.co ...

  6. 制作jQuery文字提示插件

    (functions($){ $.fn.colorTip=function(settings){ var defaultSettings={ color:'yellow', timeout:500 } ...

  7. Ubuntu 11.10 H3C iNode 客户端安装

    下载客户端,放到桌面 双击打开,点击解压缩 Ctrl+Alt+T打开终端,依次输入以下代码并回车 代码: cd 桌面sudo cp iNodeClient /usr -Rcd /usr/iNodeCl ...

  8. 【Codeforces】CF 2 B The least round way(dp)

    题目 传送门:QWQ 分析 求结尾0的数量QwQ. 10只能是$ 2 \times 5 $,我们预处理出每个数因子中2和5的数量. 我们接着dp出从左上到右下的经过的最少的2的数量和最少的5的数量.两 ...

  9. OpenGL chapter5 基础纹理

    Chapter5 基础纹理 Contents: ==================================================== | 任务 | 使用的函数 ========== ...

  10. move操作

    move一个表到另外一个表空间时,索引不会跟着一起move,而且会失效.(LOB类型例外) 表move,我们分为: *普通表move *分区表move *LONG,LOB大字段类型move来进行测试和 ...