1

概念

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)

肖圣贤
31 声望5 粉丝

学习让我充实


引用和评论

0 条评论