当前位置:   article > 正文

Neo4j图数据库_neo4j 国内大厂

neo4j 国内大厂


【转载请注明出处: https://leytton.blog.csdn.net/article/details/121426847

一、前言

图数据库专门用于查询两点之间的关系及其属性,比如查询出一个人的好友、以及好友的好友。用传统的MySQL等关系型数据库就比较耗性能或者需要复杂的查询语句了。

我们在做技术选型的时候,看一下图数据库排行榜:
在这里插入图片描述
如上图所示,Neo4j一骑绝尘。当然排名较高也可能是由于比较旧,也要看一下其他的数据库。比如国产的Nebula Graph据说就很牛逼,看官网上介绍国内的很多大厂都在用它,性能也甩Neo4j一条街。但笔者搜索了一下,网上的资料教程基本是其营销号的文章。考虑到我们的需求,稳妥起见,还是选择了Neo4j。

二、初体验

打开Neo4j官网,可以看到在沙盒中体验的选项,先用快速上手玩一下。当然过程需要注册账号就不说了。
在这里插入图片描述
选择一个示例数据库Movies,里面有电影、演员、导演及其之间的关系数据:
在这里插入图片描述
在浏览器中打开管理工具:
在这里插入图片描述

进去后左侧栏有个教程,教你一步步使用CQL查询语句:

Match (m:Movie) where m.released > 2000 RETURN m limit 5
  • 1

在这里插入图片描述
上述查询将返回2000年以后发行的5部电影。

三、插入语句

添加名字叫John Doe的人物:

Create (p:Person {name: 'John Doe'}) RETURN p
  • 1

在这里插入图片描述

四、查询语句

节点

节点表示实体。图形数据库中的节点类似于关系数据库中的行。
关系
两个节点可以与关系连接。

查询所有执导 2010 年后上映电影的导演:

MATCH (p:Person)-[d:DIRECTED]-(m:Movie) where m.released > 2010 RETURN p,d,m
  • 1

结果如下(有三个导演执导了电影Cloud Atlas):
在这里插入图片描述

查询所有在 2010 年之后上映的电影演员:

MATCH (p:Person)-[d:DIRECTED]-(m:Movie) where m.released > 2010 RETURN p,d,m
  • 1

在这里插入图片描述

标签
标签是节点或关系的名称或标识。

返回20个标签为Person的节点。

MATCH (p:Person) RETURN p limit 20
  • 1

在这里插入图片描述

返回20个任意类型的节点。

MATCH (n) RETURN n limit 20
  • 1

在这里插入图片描述
属性
节点和关系可以有属性,形式为键值对。

查询电影属性(标题和发行年份):

MATCH (m:Movie) return m.title, m.released
  • 1

在这里插入图片描述
查询人物属性(姓名和出生年份):

MATCH (p:Person) return p.name, p.born
  • 1

在这里插入图片描述

查询名字叫Tom Hanks的人:

Match (p:Person {name: 'Tom Hanks'}) RETURN p
  • 1

MATCH (p:Person) where p.name = "Tom Hanks" RETURN p
  • 1

在这里插入图片描述
更多where语句请查看手册

查询2010年至2015年间发行电影

MATCH (m:Movie) where m.released > 2010 and m.released < 2015 RETURN m
  • 1

五、Merge语句

Merge语句用于:

  • 查询已有节点并绑定它们
  • 创建节点并绑定它们
MERGE (p:Person {name: 'John Doe'})
ON MATCH SET p.lastLoggedInAt = timestamp()
ON CREATE SET p.createdAt = timestamp()
Return p
  • 1
  • 2
  • 3
  • 4

上述代码将查询姓名为John Doe的人,如果有则设置其lastLoggedInAt 属性为当前时间戳;没有则创建,并设置其createdAt 属性为当前时间戳。

在这里插入图片描述

MERGE (m:movie {title: 'Greyhound'})
ON MATCH SET m.lastUpdatedAt = timestamp()
ON CREATE SET m.released = "2020", m.lastUpdatedAt = timestamp()
Return m
  • 1
  • 2
  • 3
  • 4

上述代码将查询titleGreyhound的电影,如果有则设置其lastUpdatedAt 属性为当前时间戳;没有则创建,并设置其,released 属性为2020,以及lastUpdatedAt 属性为当前时间戳。

六、创建关系

关系连接两个节点

比如,下面语句查询姓名为Tom Hanks的人,标题为Cloud Atlas的电影,创建一个关系为WATCHED,表示已看该电影。返回关系类型。

MATCH (p:Person), (m:Movie)
WHERE p.name = "Tom Hanks" and m.title = "Cloud Atlas"
CREATE (p)-[w:WATCHED]->(m)
RETURN type(w)
  • 1
  • 2
  • 3
  • 4

在这里插入图片描述

七、关系类型

在Neo4j中,可以有两种关系:输入和输出。
在这里插入图片描述

上面图片中,可以说,Tom Hanks有一个输出关系->,而Cloud Atlas有一个输入关系<-。关系是有方向的。
然而在一些情况下,输入输出关系并不重要,所以以下语句等效:

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

八、高级语法

  • 查询谁导演了电影Cloud Atlas
MATCH (m:Movie {title: 'Cloud Atlas'})<-[d:DIRECTED]-(p:Person) return p.name
  • 1
  • 查询与Tom Hanks合作演出过的人:
MATCH (tom:Person {name: "Tom Hanks"})-[:ACTED_IN]->(:Movie)
<-[:ACTED_IN]-(p:Person) return p.name
  • 1
  • 2
  • 查询与电影Cloud Atlas有关的人以及与电影关系:
MATCH (p:Person)-[relatedTo]-(m:Movie {title: "Cloud Atlas"}) return p.name, type(relatedTo)
  • 1

查询Tom Hanks有关的电影以及人物关系

MATCH p=(p1:Person {name: 'Tom Hanks'})-[r]->(m)<-[r1]-(p2) return p
  • 1
声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号