How to CRUD by Cypher

主要学习资源有: Neo4j Cypher Refcard:Cypher 速记卡 Getting Started with Neo4j - Developer Guides:开发者入门文档合集 语法简介 Cypher 语法视频介绍 介绍 Cypher 语法有一个视频,很不错。 Cypher 基于 Pattern 模式(Pattern)由节点和边组成,并且可以表达简单或复杂的遍历或路径。 模式的识别是基础,而人们是擅长识别这些模式的,因此 Cypher 也基于模式来简化查询。 模式也是 AsciiArt,很直观。 注释 双斜线:// 节点表示 Node 用圆括号包围一个节点:(node)。 为什么是圆括号?因为看起来像一个圆圆的节点啊。 举例: () // 匿名节点,可指代任意节点 (p:Person) // 变量p与标签Person (:Technology) // 无变量,标签Technology (work:Company) // 变量work与标签Company 节点变量 如果之后想引用这个节点,那么我们可以对节点分配一个变量,命名就类似编程语言的变量命名。 如果节点与返回的结果并不相关,那么可以指定匿名节点即空括号(),这意味着之后不能返回这个节点。 节点标签 节点标签可以把相似的节点聚集起来。 就像 SQL 中选择特定的某张表。 如果不指定标签,就会查询所有节点,这真的很笨重。 边表示Relationship 边在Cypher中使用箭头表示-->、<--。 边的属性可以用箭头中的方括号表示-[:LIKES]->。 无向图的边没有方向--,这就表示任一方向的关系都可以被遍历到。这对忽略方向时的查询非常有用。 如果数据是有向边,那么当查询指定了错误的方向时返回的结果为空。在这种情况下,使用无向边来查询是合适的。 边类型 边类型对边增加了语义,展示了节点之间是为何相连的。 边类型最好是有语义的,如使用动词或动作。 边变量 就像节点变量一样,当我们想引用某个边时,可以设置变量,如[r]。 匿名边:--、-->、<--。 有变量的边:-[rel]->、-[rel:LIKES]->。 注意如果没有冒号的话就不是边类型了,而成了边变量。 属性 Property 属性就是键值对,对节点和边的细节进行描述。...

五月 28, 2022

Graph Database Basic Concepts

Neo4j 简介 Neo4j 使用属性图(Property Graph)模型1。 一个图包含节点(Objects)和边(Relationships)。 Neo4j 的属性图模型包含了: 节点 节点标签:用于区分节点的类型,0个或多个 边:源节点与目标节点之间的一条有向边 边类型:用于区分边的类型,有且仅有1个 属性:节点和边都可以有属性(键值对)用于描述节点和边 注意这些名词的英文:node、relationship、label(节点可以有0个或多个标签)、type(边只有一个类型)、property 在数学的图论中,node 也称 vertex、point,relationship 也称 edge、link、line。 属性图 上面这个图可以用 Cypher 语句这样表示: CREATE (:Person:Actor {name: 'Tom Hanks', born: 1956})-[:ACTED_IN {roles: ['Forrest']}]->(:Movie {title: 'Forrest Gump'})<-[:DIRECTED]-(:Person {name: 'Robert Zemeckis', born: 1951}) Cypher 查询语言2,是 Neo4j 图查询语言,能让你从图中获取数据。类似图的 SQL ,也是被 SQL 启发的,让你能专注于你想要什么数据而不是怎么拿到它。目前,它是最易于学习的图语言,因为跟其他语言相似,并且很主观。 后面我们会详细介绍这门语言。可以看到,圆括号包裹了节点,而方括号包裹了边,还有类似ASCII艺术风格的箭头表示。 Cypher 可以说是 Neo4j 的主要接口。 节点 Node 节点被用来表示一个域的实体。 节点的标签 Label 用来区分实体类型,一个实体可以有0个或多个标签。 标签可以在运行时动态添加或删除,因此可以用来表示节点的临时状态。 不同的标签可以表达数据的不同维度。 建议节点标签命名用大驼峰,如 :VehicleOwner。3 边 Relationship 一条边描述了源点与目标点之间的关系。 边是有向边,并且必须有一个类型 Type 来区分是何关系。 边可以用很多属性即键值对,可用来进一步描述关系。...

五月 27, 2022