Neo4j入门-以Movies Project为例

项目地址Neo4j官网

基础

节点,关系,标签,特性

节点和关系是图数据库的基本组成单元

节点(Nodes)

节点表示实体(entities).与关系型数据库进行对比,可得:

图数据库关系型数据库
节点

节点在Cypher语句中用 (p:Person) 表示,p 是一个变量,而 Person 是它所指的节点类型。

关系(Relationship)

在这里插入图片描述
关系用来表示节点之间的关系,如上图, ACTED_IN, REVIEWED, PRODUCED, WROTE 和 DIRECTED 都是对应节点类型之间关系连接.

在Cypher语句中用 [w:WORKS_FOR] 表示关系, w是一个变量,而 WORKS_FOR是变量所指的关系.

标签(Label)

标签用来对节点和关系进行命名识别,例如上图中的 Movie 和 Person 就是节点标签, ACTED_IN, REVIEWED, PRODUCED, WROTE 和 DIRECTED就是关系标签

在Cypher语句中,标签都表示为 : Person:ACTED_IN这种形式. 可以对标签制定一个变量,例如 (p:Person), 其中p是变量,表示 Person 节点标签.

特性(Properties)

特性,为节点和关系添加属性,以 name-value的形式存储,类似键值对

在Cypher语句中,可以用variable.的形式,返回特定的properties. MATCH (m:Movie) return m.title, m.released,这个语句只会返回title和released属性

图查询语言Cypher

创建节点Create

Create (p:Person {name: 'SHOA LIN'}) RETURN p

查询操作:Macth

Match (m:Movie) where m.released > 2005 RETURN m

Cypher查询语句中,节点(Node)用 (m:Movie) 表示,m是变量, Movie 是节点类型,根据 where 里面的条件进行匹配, RETURN 返回变量 m.

Match (m:Movie) where m.released > 2005 RETURN count(m)

除此以外, RETURN 还可以用表达式或者函数对变量 m 进行处理后再返回处理的结果.

MATCH (n) RETURN n limit 20

提供一些类似关键字的语法,对输出的数量进行限制.

Match (p:Person {name: 'Tom Hanks'}) RETURN p
MATCH (p:Person) where p.name = "Tom Hanks" RETURN p

通过精确的条件,用Match进行查询. 上面两句话结果相同,但是下面的语句用了where.

更多的关于where的用法请参考链接

复合语句(Merge Clause)

复合语句用来 查询已有的节点并绑定创建新的节点并绑定.

MERGE (p:Person {name: 'John Doe'})
ON MATCH SET p.lastLoggedInAt = timestamp()
ON CREATE SET p.createdAt = timestamp()
Return p

该复合语句的意义:
如果Person{name:'John Doe'}节点不存在,则创建,并设置createAt属性.
如果节点存在,则设置lastLoggedInAt属性

创建关系

MATCH (p:Person), (m:Movie)
WHERE p.name = "SHOA LIN" and m.title = "Cloud Atlas"
CREATE (p)-[w:WATCHED]->(m)
RETURN type(w)

上面语句对实例SHOA LINCloud Atlas创建关系[w:WATCHED]

关系类别

Neo4j中可以有两种关系,传入(incoming)传出(outgoing)关系.
在这里插入图片描述
以上图中,Tom Hanks存在
传出
关系,Cloud Atlas存在传入关系.

 MATCH (p:Person)-[r:ACTED_IN]->(m:Movie) RETURN p,r,m

以上query语句中,Person存在传出关系,Movie存在传入关系,该语句返回存在ACTED_IN关系的PersonMovie.

进阶Cyper查询语法

以下是一些例子
找出导演电影Cloud Atlas的导演

 MATCH (m:Movie {title: 'Cloud Atlas'})<-[d:DIRECTED]-(p:Person) return p.name

找出与Tom Hanks一起出演电影的人

MATCH (tom:Person {name: "Tom Hanks"})-[:ACTED_IN]->(:Movie)<-[:ACTED_IN]-(p:Person) return p.name

找出与电影Cloud Atlas存在关系的人

MATCH (p:Person)-[relatedTo]-(m:Movie {title: "Cloud Atlas"}) return p.name, type(relatedTo)

此处需要特别注意的是,用到了变量[relatedTo],它会找出节点之间的所有关系

找出距离Kevin Bacon,3跳的电影和演员

MATCH (p:Person {name: 'Kevin Bacon'})-[*1..3]-(hollywood) return DISTINCT p, hollywood

此处hollywood指的是database中任意的节点(在这个case中指的是PersonMovie)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值