专栏首页海天一树Neo4j学习(3):操作图数据库的语言--Cypher

Neo4j学习(3):操作图数据库的语言--Cypher

Cypher是一种用来处理图数据库的语言,语法比较简单。 1 查询数据库里的数据

match(n) return n

match是匹配规则,(n)表示所有节点,语法要求加上小括号。 return n表示返回匹配到的所有节点

1.png

刚安装完,数据库里没有数据。所以显示“no records”。

2 创建一个节点

CREATE (p1:Person { name: "Liu Da", age: 20})

p1是变量名,Person是节点名,{}内包含了节点的两个属性。

2-1.png

查询数据库中的所有节点

match(n) return n

2-2.png

3 删除单节点

match(p1:Person) detach delete p1

3-1.png

查询数据库中的节点,如果删除成功的话,此时数据库里没有节点

3-2.png

4 创建两个节点并建立关系

create 
(p1:Person{name:"Liu Da", age:20}),
(p2:Person{name:"Chen Er", age:22}),
(p1)-[:KNOWS]->(p2)

4-1.png

这里创建了两个节点,并且Liu Da知道Chen Er,但Chen Er不知道Liu Da 查询这两个节点及关系

MATCH (p1: Person)-[KNOWS]-(p2: Person) return p1,KNOWS,p2

4-2.png

5 删除两个节点和它们的关系 注意,neo4j删除节点时,要求把关系一并删除掉。不能只删除节点,不删除关系。

MATCH (p1: Person)-[KNOWS]-(p2: Person) 
DELETE p1, KNOWS, p2

5-1.png

查询所有节点

5-2.png

6 为节点增加属性

create(p1:Person{name:"Liu Da"})

6-1.png

match(p1) set p1.age = 20

6-2.png

6-3.png

7 修改节点属性

match(p1) set p1.age = 33

7-1.png

7-2.png

8 查找节点的共有属性

CREATE
(p2:Person { name: "Liu Er", age: 15, learn: "Muay Thai" }),
(p3:Person { name: "Zhang San", age: 25, sex: “Male” }),
(p4:Person { name: "Li Si", age: 30, hobby: "Muay Thai" }),
(p2)-[:KNOWS]->(p3),
(p3)-[:KNOWS]->(p2),
(p3)-[:KNOWS]->(p4)

8-1.png

Liu Er和Zhang San互相认识, Zhang San认识Li Si, Li Si不认识Zhang San和Liu Er, Liu Er正在学习泰拳, Li Si的爱好是泰拳。

8-2.png

MATCH (x) - [:KNOWS]- () - [:KNOWS] - (fighter)
WHERE x.name = "Liu Er" and fighter.hobby = "Muay Thai"
RETURN fighter

这里先找出p2认识的人,因为这个人不是最终要找的人,所以()里不用填写变量名,再通过这个人找出业余爱好为泰拳的人,这个人用变量fighter来表示。

8-3.png

9 删除所有节点 先看数据库里有多少个节点

match(a) return a

9-1.png

删除所有节点和关系

9-2.png

再次查询数据库里的所有节点

9-3.png

10 导入csv数据 从https://pan.baidu.com/s/1QJRS8eyZXQt44wBwNyZ6eQ 下载电影相关的五个csv文件 将五个csv文件放到neo4j的import目录中

利用neo4j的语句,将import中的五个csv文件的数据加载到neo4j数据库中 逐步执行下面的五个Load语句

找到neo4j的安装路径,并在D:\neo4j-community-3.4.0\目录下创建import目录
完整路径如下D:\neo4j-community-3.4.0\import
因为neo4j支持导入csv文件,其默认目录入口是 ...\import


//导入节点 电影类型  == 注意类型转换
LOAD CSV WITH HEADERS  FROM "file:///genre.csv" AS line
MERGE (p:Genre{gid:toInteger(line.gid),name:line.gname})


//导入节点 演员信息    
LOAD CSV WITH HEADERS FROM 'file:///person.csv' AS line
MERGE (p:Person { pid:toInteger(line.pid),birth:line.birth,
death:line.death,name:line.name,
biography:line.biography,
birthplace:line.birthplace})


// 导入节点 电影信息
LOAD CSV WITH HEADERS  FROM "file:///movie.csv" AS line  
MERGE (p:Movie{mid:toInteger(line.mid),title:line.title,introduction:line.introduction,
rating:toFloat(line.rating),releasedate:line.releasedate})


// 导入关系 actedin  电影是谁参演的 1对多
LOAD CSV WITH HEADERS FROM "file:///person_to_movie.csv" AS line 
match (from:Person{pid:toInteger(line.pid)}),(to:Movie{mid:toInteger(line.mid)})  
merge (from)-[r:actedin{pid:toInteger(line.pid),mid:toInteger(line.mid)}]->(to)

//导入关系  电影是什么类型 == 1对多
LOAD CSV WITH HEADERS FROM "file:///movie_to_genre.csv" AS line
match (from:Movie{mid:toInteger(line.mid)}),(to:Genre{gid:toInteger(line.gid)})  
merge (from)-[r:is{mid:toInteger(line.mid),gid:toInteger(line.gid)}]->(to)

导完之后,可看到数据里多了一些节点和关系

10-1.png

查询“章子怡演了哪些电影”

match(n:Person)-[:actedin]->(m:Movie) where n.name='章子怡' return m.title

10-2.png

查询一下关系actedin有哪些

10-3.png

本文分享自微信公众号 - KidsCode少儿编程(gh_de7b45c40e8b)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2018-08-30

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Neo4j学习(1):Neo4j是什么

      最简单的图是单节点的,一个记录,记录了一些属性。一个节点可以从单属性开始,成长为成千上亿,虽然会有一点点麻烦。从某种意义上讲,将数据用关系连接起来分布到不同...

    海天一树
  • Win系统安装Neo4j

    Neo4j 是目前最流行的图形数据库,支持完整的事务,在属性图中,图是由顶点(Vertex),边(Edge)和属性(Property)组成的,顶点和边都可以设置...

    海天一树
  • NOIP 2011初赛普及组C/C++答案详解

    3 C 8G = 8 * 1024 M 8 * 1024 / 2 = 4096张 注意,题目说的是“大约”,不要求精确。

    海天一树
  • HTML DOC

    HTML 文档中的所有节点组成了一个文档树(或节点树)。HTML 文档中的每个元素、属性、文本等都代表着树中的一个节点。树起始于文档节点,并由此继续伸出枝条,直...

    Hongten
  • 前端学习(47)~DOM简介和DOM操作

    DOM:Document Object Model,文档对象模型。DOM 为文档提供了结构化表示,并定义了如何通过脚本来访问文档结构。目的其实就是为了能让js操...

    Vincent-yuan
  • 误删不跑路,大牛运维神技能分分钟恢复

    突发事件,应用上传的数据被程序自动删掉了,可悲的是还没有数据备份,数据是放在系统的 /data/webapps/xxxx/upload 目录下面,可把我们记坏了...

    小小科
  • 它改变了 JavaScript 的体系结构——Webpack 5 Module Federation

    Webpack 5 Module Federation: A game-changer in JavaScript architecture

    疯狂的技术宅
  • 误删不跑路,大牛运维神技能分分钟恢复

    突发事件,应用上传的数据被程序自动删掉了,可悲的是还没有数据备份,数据是放在系统的 /data/webapps/xxxx/upload 目录下面,可把我们急坏了...

    黄泽杰
  • 看完这一篇,误删后再也不用跑路了

    一、背景 突发事件,应用上传的数据被程序自动删掉了,可悲的是还没有数据备份,数据是放在系统的 /data/webapps/xxxx/upload 目录下面,可把...

    小小科
  • 我把Linux系统上误删的数据找回来了

    信息安全公益宣传,信息安全知识启蒙。 ? 突发事件,应用上传的数据被程序自动删掉了,可悲的是还没有数据备份,数据是放在系统的 /data/webapps/xxx...

    企鹅号小编

扫码关注云+社区

领取腾讯云代金券