上手Neo4j (二)

简介: 上手Neo4j (二)

Cypher语言#


cypher是语言是针对 neo4j设计的语言,类sql,但是他没有sql中多表之间的jion操作


创建 标签 | 节点 | 属性 | 关系#


创建了两个节点,并且使用love 关联了他们的关系   张三-love->李四
create (:Person{name:'张三'})-[:love]->(:Person{name:'李四'})
其中 Person 是 Label
     {name:'张三'} 整体是 node
     name: 是属性
     [:love] 是关系 (别忘了加: 冒号)


创建节点时,取个别名会很方便后续的操作#


下面这句就是创建的一个id为'grandmother'的节点,并返回新创建的这个节点展示

如果你用浏览器访问,看到的每一个节点上的描述文字,其实就是id的值


create (n:Persion{id:'grandmother',name:'奶奶'}) return n


属性类型#


Neo4j Java
Null null
Boolean java.lang.Boolean
Integer java.lang.Long
Float java.lang.Double
String java.lang.String
List java.util.List
Map java.util.Map
Node org.neo4j.driver.v1.types.Node(*)
Relation org.neo4j.driver.v1.types.Relationship(*)
Path org.neo4j.driver.v1.types.Path(*)


Match 查询匹配#


基本上所有的操作之间都得先把符合条件的node match出来, match 相当于 select


从Person标签中匹配出25条
match(n:Person) return n limit 25
匹配出id为2008的25个节点
match(n:Person{id:'2008'}) return n limit 25
同上
match(n:Person) where n.id ='2008'  return n limit 25


Merge == Match or Create#


先匹配出符合条件的节点,在给两个节点添加关系


match (n:Person{id:'son'} ),(f:Persion{id:'jiao'})
merge (n)-[:fuqi]->(f)


Delete & Remove#


delete 用于删除 节点和关系


//删除son和jiao的  jiao   -[:girlfriend]->  son 的关系
match (n:Person{id:'son'}),(f:Persion{id:'jiao'})
merge (n)<-[r:girfrield]-(f) delete r
// 删除节点
match (n:Person{id:'1'}) delete n 
// 当把一个label下的全部node删除后, label也会消失
match (n:Person{id:'1'})-[r:love]->(f:Person{id:'2'}) delete n,r,f


remove 用户删除 标签


查询出一个标签然后删除它
match (n:Test) remove n:Test
// 当然,如果label中只有一个node了, 那么delete这个节点之后,label依然会消失


Set 修改属性#


set 相当于update

如: 给指定的node,动态添加属性, 可以同时添加多个值,用逗号分隔

这也反应出 neo4j是无schme的特性,非结构化数据


match (n:Person{id:'1'}) set n.id='2',n.name='张三'


补充#


  • 排序


按照age正序排序
match (n:Person) return n order by n.age limit 25
按照age倒叙排序
match (n:Person) return n order by n.age desc limit 25


  • 跳过


match (n:Person) return n   skip 2


  • 去重 : 连接两个match语句, 取出中间的重复部分


match XXX   union all  match YYY


  • Null


match (n:Person) return n where n.age is not null


  • In


match (n:Person) return n where n.age in [2,3,4,5,6,7]


常用的函数#


  • 普通函数


函数名 作用
Upper 字母转大写
Lower 字母转小写
Substring 获取给定串的子串
replace 字符串替换


  • 聚合函数


函数名 作用
count 返回 match 返回的行数
max 返回match到的最大值
min 返回match到的最小值
sum 返回match命令的所有行求和值
avg 返回match返回的所有行的平均值


  • 查询节点之间的最短路径 shortestPath


//其中   *..2  表示查看他们之间的最短路径为2, 路径数==关系数 ,2 要求关系层在2 以内
match p=shortestPath((a:Persion{id:'1'})-[*..2]-(b:Persion{id:'5'})) return p


  • 查询节点之间全部的最短路径 shortestPath


match p=allshortestpaths((N:Actor{name:'123'})-[*..6]-(M:Actor{name:'789'})) return p


六层关系理论: 六度关系理论由美国社会心理学家斯坦利-米尔格兰姆(Stanley Milgram)于1967年最先提出。通俗地说,你和世界上任何人之间所间隔的关系不会超过六度,也就是说最多通过六个人你就能够认识任何一个陌生人


数据备份和恢复#


它的备份超级简单,当你把数据全部录入neo4j之后呢,只需要备份下data目录即可,当遭受攻击,或者主动数据迁移时,只需要将我们备份的data目录替换原data目录即可,数据自然会恢复


SpringDataNeo4j#


Spring boot 版本 2.1.3RELEASE

点击进入: SpringDataNeo4j的官方文档


  • 导入jar包坐标


<dependency>
            <groupId>org.neo4j</groupId>
            <artifactId>neo4j-ogm-http-driver</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-neo4j</artifactId>
        </dependency>


如何使用javaBean表示node#


@Data
@NodeEntity(label = "Actor") // 通过label设置  标签的名字
@NoArgsConstructor
@AllArgsConstructor
public class Actor {
    // 这个id,如果我们没有自定义,使用的就是系统默认生成的
    // 自定义了的话, 使用的是我们自己的, 但是不能缺少, 而且 必须是Long类型的
    @Id
    @GeneratedValue
    private Long id ;
    //@Property(name="name")  改变生成的json格式数据中的key
    private String name;
    private String image;
}


如何使用javaBean表示node之间的relation#


@RelationshipEntity(type = "学生")
@AllArgsConstructor
@NoArgsConstructor
@Data
public class StudentRelation {
    @Id
    @GeneratedValue
    private Long id;
    //todo 关系节点这两个下面的两个不能少
    @StartNode
    private Actor startNode;
    @EndNode
    private Actor endNode;
}


简单的curd#


自定义Repository,让他继承Neo4jRepository


public interface ActorRepository extends Neo4jRepository<Actor,Long> {}

使用方法跟jpa一样,无脑是就行


复杂查询#


使用@Query注解,自定义cypher


public interface StudentRelationRepository extends Neo4jRepository<StudentRelation,Long> {
    // todo ok
    @Query(value = "MATCH p=(n:Actor)<-[StudentRelation]->(m:Actor) WHERE m.name={name} RETURN p")//
    List<StudentRelation> findAll(@Param("name") String name);
    //todo ok 返回节点n以及n指向的所有节点与关系
    @Query("MATCH p=(n:Actor)-[StudentRelation]->(m:Actor) WHERE id(n)={0} RETURN p")
    List<StudentRelation> findAllByBotNode(Actor actor);
}


批量导入csv文件数据#


批量导入csv里面的数据,前提是打开两个配置


dbms.security.allow_csv_import_from_file_urls=true
dbms.directories.import=import


命令:


load csv with headers from "file:///bank.csv" As line create (:Bank{name:line.bank,number:line.count,detail:line.detail})


相关文章
|
3月前
|
存储 NoSQL API
使用Py2neo进行Neo4j图数据库的增删改查操作
使用Py2neo进行Neo4j图数据库的增删改查操作
139 5
|
3月前
|
存储 固态存储 NoSQL
neo4j安装调研简介-代做找我
neo4j安装调研简介-代做找我
21 0
|
5月前
|
SQL 关系型数据库 数据库连接
Entity Framework Core 入门教程来袭!快速上手强大的 ORM 工具,开启高效数据库开发之旅!
【8月更文挑战第31天】Entity Framework Core(EF Core)是一个轻量且可扩展的对象关系映射(ORM)框架,允许开发者使用 .NET 语言操作数据库而无需直接编写 SQL 语句。本教程涵盖 EF Core 的安装、数据库上下文创建、数据库连接配置及常见数据库操作(如添加、查询、更新和删除),并介绍如何利用数据库迁移功能安全地更改数据库结构。通过本教程,你可以快速掌握 EF Core 的基本用法,提高开发效率。
290 0
|
5月前
|
API 开发工具 图形学
Pico Neo 3教程☀️ 六、项目的配置总结及交互开发
Pico Neo 3教程☀️ 六、项目的配置总结及交互开发
|
8月前
|
NoSQL Java 数据库
neo4j图数据库下载安装配置
neo4j图数据库下载安装配置
|
SQL NoSQL 算法
Neo4j极简教程
图数据库是NoSQL类数据库的一大典型代表,在国内图数据库属于新兴事物,其优异的复杂关系解决方案引起了国内众多大型互联网公司及IT开发者的关注,而Neo4j是目前图形化数据库中最为出色、最为成熟的产品。
761 0
Neo4j极简教程
|
机器学习/深度学习 SQL 数据库
NEO4J的入门和一些简单的操作
> 持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第29天,[点击查看活动详情](https://juejin.cn/post/7147654075599978532 "https://juejin.cn/post/7147654075599978532") # 引言 今天我们继续学习NEO4J. # 创建 创建语句我们一般会使用create指令 我们首先在控制台上输入`neo4j.bat console`启动neo4j 然后打开你的浏览器,然后在浏览器地址栏中输入 `http://localhost:7687 - Neo4j Browser](http:
|
SQL 存储 NoSQL
Neo4j学习笔记(二) 查询语言
Neo4j学习笔记(二) 查询语言
224 0
|
存储 NoSQL Java
Neo4j学习笔记(一) 安装配置
Neo4j学习笔记(一) 安装配置
635 0
|
SQL 数据可视化 NoSQL

热门文章

最新文章