neo4j 学习笔记
节点(Node)是图数据库中的一个基本元素,用以表示一个实体记录,就像关系数据库中的一条记录一样。在 Neo4j 中节点可以包含多个属性(Property)和多个标签(Label)。
关系(Relationship)同样是图数据库中的基本元素。当数据库中已经存在节点后,需要将节点连接起来构成图。关系就是用来连接两个节点,关系也称为图论的边(Edge),其始端和末端都必须是节点,关系不能指向空也不能从空发起。关系和节点一样可以包含多个属性,但关系只能有一个类型(Type),
关系必须有开始节点(Start node)和结束节点(End node),两头都不能为空。
节点可以被关系串联或并联起来,由于关系可以是有方向的,所以我们可以在由节点、关系组成的图中进行遍历操作。
在图的遍历操作中我们可以指定关系遍历的方向或者指定为无方向,因此在创建关系时不必为两个节点创建相互指向的关系,而是在遍历时不指定遍历方向即可。这样在遍历时不指定方向即可。
特别注意一个节点可以存在指向自己的关系。
当使用节点和关系创建了一个图后,在此图中任意两个节点间都是可能存在路径的。图中任意两节点都存在由节点和关系组成的路径,路径也有长度的概念,也就是路径中关系的条数。
当然也可以说单独一个节点就可以组成长度为 0 的路径,如果是两个简单的节点,中间只存在一条关系,那这条路径的长度就是 1。
遍历 Traversal 一张图就是按照一定的规则,根据它们之间的关系,依次访问所有相关联的节点的操作。
按照官方的入门实例敲了一遍代码,虽然不太熟练,但是感觉还好
// 创建一个节点(电影)
CREATE (TheMatrix:Movie {title:'The Matrix', released:1999, tagline:'Welcome to the Real World'})
// 创建人物
CREATE (Keanu:Person {name:'Keanu Reeves', born:1964})
...
// 创建关系
CREATE
(Keanu)-[:ACTED_IN {roles:['Neo']}]->(TheMatrix),
(Carrie)-[:ACTED_IN {roles:['Trinity']}]->(TheMatrix),
(Laurence)-[:ACTED_IN {roles:['Morpheus']}]->(TheMatrix),
(Hugo)-[:ACTED_IN {roles:['Agent Smith']}]->(TheMatrix),
(LillyW)-[:DIRECTED]->(TheMatrix),
(LanaW)-[:DIRECTED]->(TheMatrix),
(JoelS)-[:PRODUCED]->(TheMatrix)
neo4j$ match (tom {name:"Tom Hanks"}) return tom
neo4j$ match (cloudAtlas {title: "Cloud Atlas"}) return cloudAtlas
neo4j$ match (people:Person) return people.name Limit 10
n
eo4j$ match (nineties:Movie) where nineties.released > 1990 and nineties.released < 2000 return nineties.title limit 10
neo4j$ match (tom:Person {name: "Tom Hanks"})-[:ACTED_IN]->(tomHanksMovies) return tom, tomHanksMovies
neo4j$ match (cloudAtlas {title: "Cloud Atlas"})<-[:DIRECTED]-(directors) return directors.name, directors.born
neo4j$ match (tom:Person {name:"Tom Hanks"})-[:ACTED_IN]->(m)<-[:ACTED_IN]-(coActors) return coActors.name
// 清除电影数据库
neo4j$ MATCH (n) DETACH DELETE n
// 确认
neo4j$ MATCH (n) RETURN n
复制代码
评论