Neo4j 是一个广泛使用的图形数据库管理系统(Graph Database Management System)。它是一种NoSQL数据库,专为存储和查询图形数据而设计。Neo4j 支持图形数据模型,允许用户以节点(Nodes)和关系(Relationships)的形式存储数据,并通过属性(Properties)来丰富这些节点和关系。
下载地址:下载地址在这里
安装完成后别忘了配置环境变量
启动neo4j
neo4j console
然后访问 http://localhost:7474/
然后进行登录,默认用户名和密码都是neo4j
当看到这个界面就表示登录成功了
neo4j中包含节点、关系、属性
所以Cypher 查询语言要做的就是对这些进行CRUD
创建一个节点的基本语法如下:
CREATE (label:Label {property: 'value'})
这里的 label
是节点的标签(Label),property
是节点的属性(Property),value
是属性的值。
创建关系的基本语法如下:
CREATE (node1:Label1)-[:RELATIONSHIP_TYPE {property: 'value'}]->(node2:Label2)
这里的 node1
和 node2
是两个节点,RELATIONSHIP_TYPE
是关系的类型(Type),property
是关系的属性,value
是属性的值。
如果你想查询一个特定的节点,可以使用以下语句:
MATCH (n:Label) WHERE n.property = 'value'
RETURN n
这里 n
是一个带有 Label
标签的节点,property
是该节点的一个属性,其值为 'value'
。
如果你想查询一个特定的关系,可以使用以下语句:
MATCH ()-[r:RELATIONSHIP_TYPE]->()
WHERE r.property = 'value'
RETURN r
这将返回所有类型为 RELATIONSHIP_TYPE
的关系,其中关系 r
的属性 property
的值为 'value'
。
假设你想查询所有名字为 Alice
的 Person
节点:
MATCH (person:Person) WHERE person.name = 'Alice'
RETURN person
假设你想查询 Alice
和 Bob
之间的所有关系:
MATCH (alice:Person {name: 'Alice'})-[r]->(bob:Person {name: 'Bob'})
RETURN r
假设你想查询 Alice
到 Charlie
的所有可能路径:
MATCH p=(alice:Person {name: 'Alice'})-[*]->(charlie:Person {name: 'Charlie'})
RETURN p
这里 [ * ]
表示任意长度的路径。
假设你想查询 Alice
到 Charlie
的最短路径:
MATCH p=shortestPath((alice:Person {name: 'Alice'})-[*]->(charlie:Person {name: 'Charlie'}))
RETURN p
假设你想查询 Alice
通过 KNOWS
关系到达 Bob
的所有长度为 2 到 5 的路径:
MATCH (alice:Person {name: 'Alice'})-[r:KNOWS*2..5]-(bob:Person {name: 'Bob'})
RETURN r
假设你想统计每个年龄段的人数:
MATCH (person:Person)
RETURN person.age, count(*) AS numberOfPeopleOfSameAge
ORDER BY numberOfPeopleOfSameAge DESC
假设我们有一个简单的图形数据库,其中包含几个人及其关系,我们将查询这些人及其关系:
// 查询所有的 Person 节点
MATCH (person:Person)
RETURN person
// 查询所有 KNOWS 关系
MATCH ()-[r:KNOWS]->()
RETURN r
// 查询 Alice 和 Bob 之间的关系
MATCH (alice:Person {name: 'Alice'})-[r]->(bob:Person {name: 'Bob'})
RETURN r
// 查询 Alice 到 Charlie 的所有路径
MATCH p=(alice:Person {name: 'Alice'})-[*]->(charlie:Person {name: 'Charlie'})
RETURN p
// 查询 Alice 到 Charlie 的最短路径
MATCH p=shortestPath((alice:Person {name: 'Alice'})-[*]->(charlie:Person {name: 'Charlie'}))
RETURN p
// 统计每个年龄段的人数
MATCH (person:Person)
RETURN person.age, count(*) AS numberOfPeopleOfSameAge
ORDER BY numberOfPeopleOfSameAge DESC