概念
Nodes 节点
节点常常用来代表实体中的一条记录。
暂且把节点理解成关系型数据库表中的一条记录,但是他们以图的方式组织起来。
比如猫实体,人实体,是两种不同的实体。猫节点有有cat1,cat2,
人节点有person1,person2。
节点没有“名字”的概念。一个最简单的节点可以不带标签,不带属性。
Labels 标签
标签以打标记的方式用于节点的分类。
一个标签下可以有很多节点。
Relationships 关系
一个完整的关系包含开始节点,目标节点,关系类型Relationship types。
关系一定要有方向,从source node 源节点到target node 目标节点。
目标节点有一个进入的关联incoming relationship,源节点有一个向外的关联outgoing relationship。
两个几点之间可以有多个关系类型。
举例:周星驰饰演黄渤虎点秋香。
周星驰是开始节点,黄渤虎点秋香是目标节点,饰演是一个关系类型
Properties 属性
属性是名称和值组成的键值对entry。
可以在节点和关系上添加多对属性。
属性值可以是string,nubmer,boolean等类型。
Traversals and paths 遍历和路径
一个遍历是如何在图中查找问题答案。
例如:周星驰扮演了哪些电影?
遍历的结果可以用长度为N的路径返回。
路径表示遍历的长度,可以为0。
Schema 模式
Neo4j中的模式指的是索引和约束。
Neo4j的schema是可选的。
索引和约束可以不在schema下创建。
Indexes and Constraints
索引用来提高性能。
约束用来数据适应领域的规则。
推荐的命名规则
neo4j大写小敏感。
节点、标签:驼峰式,大写字母开头。例,:VehicleOwner
关系类型: 大写字母,用下划线分隔。例,:OWNS_VEHICLE
属性:小写驼峰,以小写字母开头。 例: firstName
查询
查询节点
一般情况下先通过标签查询关联的节点,然后在节点范围内通过属性查询某个节点。
default ResourceIterator<Node> findNodes(Label label, Map<String,Object> propertyValues)
Returns all nodes having the label, and the wanted property values.
Cypher
概念
"()"表示节点,"[]"表示关系,"{}"表示属性。
节点关系中可以自定义变量。
"(a)"定义一个节点变量,"(a)-->(b)"表示节点之间的关系,
"(a)-[r]->(b)"表示关系,并且定义变量。
"(a)--(b)"表示节点之间忽略方向的关系。
数学运算符:+ - * / %
比较运算符:> < =
布尔运算符:AND OR
字符运算符:+
列表运算符:+ IN
正则表达式运算符: =~
DELETE,可以删除关系和节点。
在删除节点时,如果节点存在关系,则必须在删除关系后才能删除节点,或者同时删除。
SET,可以增加/修改节点和关系的属性值。
REMOVE,可以移除一个标签中所有节点的数据,或者移除节点的一个属性。
COUNT,统计个数
例子
创建节点
CREATE(n: User {name:"Dav"})
//User表示标签,n表示节点代表的变量,{}里表示节点属性
创建关系
MATCH (n{name:"a"}),(m{name:"b"})
CREATE (n)-[r:KNOWS]->(m)
//MATCH 进行查询
//先查询出n,m代表的节点,然后在节点上创建r关系
使用MERGE创建节点
MERGE (n:Test {name:"c"})
ON CREATE SET n.created = timestamp()
//MERGE 创建节点时,先检查创建的节点是否存在,如果存在,则使
//用已有的节点,否则新创建一个节点。
//上面的语句创建一个节点n,并为n节点增加一个属性created,
//赋值为当前时间
使用预定义参数创建多个节点
UNWIND [{name:"a"},{name:"b"}] AS p CREAET (n:Test) SET n = p
//UNWIND 后面是一个集合,先展开,然后创建两个节点
匹配关系后删除关系和节点
MATCH ()-[r:`朋友`]->(m) DELETE r,m
//先用模式进行匹配,把所有匹配后的变量删除,上面的语句删除了关系和节点
参考
[Graph database concepts](https://neo4j.com/docs/getting-started/current/graphdb-concepts/#graphdb-nodes)
[neo4j-java-docs](https://neo4j.com/docs/java-reference/3.5/javadocs/index.html)
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。