neo4j 学习-1

时间:2022-09-21 00:17:20

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学习笔记&lpar;1&rpar;——使用API编写一个Hello World程序

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

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

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

  3. Neo4j学习笔记&lpar;1&rpar;——使用Java API实现简单的增删改查

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

  4. Neo4j 学习笔记(-)

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

  5. Neo4j学习笔记&lpar;2&rpar;——数据索引

    和关系数据库一样,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. 2000条你应知的WPF小姿势 基础篇&lt&semi;78-81 Dialog&sol;Location&sol;WPF设备无关性&gt&semi;

    在正文开始之前需要介绍一个人:Sean Sexton. 来自明尼苏达双城的软件工程师.最为出色的是他维护了两个博客:2,000ThingsYou Should Know About C# 和 2,00 ...

  2. canvas保存为data&colon;image扩展功能的实现

    [已知]canvas提供了toDataURL的接口,可以方便的将canvas画布转化成base64编码的image.目前支持的最好的是png格式,jpeg格式的现代浏览器基本也支持,但是支持的不是很好 ...

  3. Hadoop文件的基本操作

    Hadoop提供了大量的API对文件系统中的文件进行操作,主要包括: (1)读取文件 (2)写文件 (3)读取文件属性 (4)列出文件 (5)删除文件 1、读取文件 以下示例中,将hdfs中的一个文件 ...

  4. 九度OJ 题目1371:最小的K个数

    题目描述: 输入n个整数,找出其中最小的K个数.例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,. 输入: 每个测试案例包括2行: 第一行为2个整数n,k(1&lt ...

  5. STM32&lowbar;USART

    USART_InitTypeDef USART_InitStruct; //system_stm32f4xx.c 316 8//stm32f4xx.h 123 25000000 8000000 //1 ...

  6. Java1&period;5泛型指南中文版&lpar;Java1&period;5 Generic Tutorial&rpar;

    Java1.5泛型指南中文版(Java1.5 Generic Tutorial) 英文版pdf下载链接:http://java.sun.com/j2se/1.5/pdf/generics-tutori ...

  7. 团队作业4——第一次项目冲刺 tHiRd DaY

    项目冲刺--Triple Kill 小编又来了,好困呐,上了一天的课还要写博客,为什么写博客的一直是我呢..一点乐子都没有*-* 但是我还是得写啊[我也很无奈啊],那就让我给大家找点乐子吧 天霸动霸. ...

  8. struts2摘抄

    Struts2是一个基于MVC设计模式的Web应用框架,它本质上相当于一个servlet,在MVC设计模式中,Struts2作为控制器(Controller)来建立模型与视图的数据交互.struts使 ...

  9. C&num;递归复习

    static void Main(string[] args) {  Console.WriteLine("请输入你要的数字:");  long flag = Convert.To ...

  10. go import使用及&period; &lowbar;的作用解析

    go中import用于导入包.导入之后就可以使用包中的代码. 比如: import( "fmt" ) 在代码中就可以使用fmt包中的方法,如: fmt.Println(" ...