- Cypher简介
- Cypher 是一种专为图形设计的查询语言。
- Cypher代码模式
- 节点用括号表示 () 。
- 使用冒号来表示标签,例如 ( :Person ) 。
- 节点之间的关系用两个破折号书写,例如 (:Person)--(:Movie) 。
- < 关系的方向使用大于或小于符号表示 > ,例如 (:Person)-→(:Movie)
- 关系的类型使用两个破折号之间的方括号书写: [ 和 ] ,例如 [:ACTED_IN]
- 在代码中绘制的属性以 类似 JSON 的语法指定。
- Neo4j 中的属性是键/值对,例如 {name: 'Tom Hanks'} 。
- Cypher 的工作原理
- Cypher 通过匹配数据中的模式来工作。MATCH 我们使用关键字从图中检索数据。
- 类似 SQL 中的 FROM 子句
- 使用 RETURN 子句返回结果值
- 在 Cypher 中,标签、属性键和变量区分大小写。Cypher 关键字不区分大小写。
- Neo4j 最佳实践
- 使用CamelCase命名标签。
- 使用camelCase命名属性键和变量。
- Cypher 关键字的用大写。
- 过滤
- 用大括号内联指定属性值
- MATCH (p:Person {name: 'Tom Hanks'})
- 使用 WHERE 子句
- 过渡子句条件
- 按节点标签过滤
- MATCH (p)-[:ACTED_IN]->(m) WHERE p:Person AND m:Movie AND m.title='The Matrix' RETURN p.name
- MATCH (p:Person)-[:ACTED_IN]->(m:Movie) WHERE AND m.title='The Matrix' RETURN p.name
- 使用范围过滤
- > < >= <= <>
- 按属性是否为空过滤
- IS NULL
- IS NOT NULL
- 按部分字符串过滤(类似SQL中的模糊查询)
- STARTS WITH
- 以什么开始
- ENDS WITH
- 以什么结束
- CONTAINS
- 包含
- 大小写引用函数
- toLower()
- toUpper()
- STARTS WITH
- 嵌套模式过滤
- EXISTS
- NOT EXISTS
- 用列表过滤
- Cypher 列表是方括号内的一组以逗号分隔的值。
- IN [ 列表 ]
- "German" IN m.languages
- 按节点标签过滤
- 返回属性
- 返回节点或关系的属性用 key() 函数
- 返回图中定义的属性
- CALL db.propertyKeys()
- where 的过滤条件区分属性的类型,数字类型的值不能以单、双引号将值括起,与Oracle不同
- 用大括号内联指定属性值
- 创建节点
- 使用 MERGE 关键字在数据库中创建
- 必须至少指定一个属性,该属性将成为该节点的唯一主键。
- MERGE (p:Person {name: 'Michael Cain'})
- 可以 MERGE 在单个 Cypher 代码块中将多个子句链接在一起。
- MERGE (p:Person {name: 'Katie Holmes'}) MERGE (m:Movie {title: 'The Dark Knight'})
- 消除了节点的重复
- 必须指定
- 节点的标签。
- 将成为节点主键的属性的名称和值。
- ** MERGE首先执行 MATCH,如果未找到,它将创建节点。
- 必须至少指定一个属性,该属性将成为该节点的唯一主键。
- Cypher 有一个 CREATE 子句可用于创建节点。
- 使用的好处 CREATE 是在添加节点之前不查找主键。
- CREATE如果您确定数据是干净的并且希望在导入过程中提高速度,则可以使用。
- 使用 MERGE 关键字在数据库中创建
- 创建关系
- 创建 MERGE 两个节点之间的关系。
- 必须引用要为其创建关系的两个节点。
- 必须具有类型和方向
- ** 无需在MATCH模式中指定方向,因为查询引擎将查找所有连接的节点,而不管关系的方向如何。
- 使用多个子句创建节点关系
- MERGE (p:Person {name: 'Chadwick Boseman'}) MERGE (m:Movie {title: 'Black Panther'}) MERGE (p)-[:ACTED_IN]-(m)
- 更新属性
- 为节点或关系创建和修改属性
- 内联作为 MERGE 子句的一部分
- MERGE (p:Person {name: 'Michael Cain'}) MERGE (m:Movie {title: 'Batman Begins'}) MERGE (p)-[:ACTED_IN {roles: ['Alfred Penny']}]->(m) RETURN p,m
- 使用 SET 关键字创建和修改节点或关系的属性
- MATCH (p:Person)-[r:ACTED_IN]->(m:Movie) WHERE p.name = 'Michael Cain' AND m.title = 'The Dark Knight' SET r.roles = ['Alfred Penny'] RETURN p, r, m
- 内联作为 MERGE 子句的一部分
- 设置多个属性
- 需要设置多个属性,则用逗号 (,) 将它们分隔开。
- MATCH (m:Movie {title: 'Get Out'}) SET m.tagline='Gripping, scary, witty and timely!',m.released=2017 RETURN m.title, m.tagline, m.released
- 需要设置多个属性,则用逗号 (,) 将它们分隔开。
- 删除属性
- REMOVE 关键字将属性设置来移除或删除节点或关系中的属性 =null 。
- 为节点或关系创建和修改属性
- 合并处理
- MERGE 它在图中创建节点和关系。 MERGE 操作首先尝试在图中找到模式。如果找到模式,则数据已经存在并且不会被创建。如果未找到模式,则可以创建数据。
- 自定义 MERGE 行为
- 可以使用 ON CREATE SET(节点不存在) 或 ON MATCH SET(节点已存在) 条件或SET关键字来设置任何附加属性。
- 当前时间函数
- timestamp()
- datetime()
- 删除
- 节点nodes
- MERGE (p:Person {name: 'Jane Doe'})
- MATCH (p:Person) WHERE p.name = 'Jane Doe' DELETE p
- 关系relationships
- MATCH (m:Movie {title: 'The Matrix'}) MERGE (p:Person {name: 'Jane Doe'}) MERGE (p)-[:ACTED_IN]->(m) RETURN p, m
- MATCH (p:Person {name: 'Jane Doe'})-[r:ACTED_IN]->(m:Movie {title: 'The Matrix'}) DELETE r RETURN p, m
- 图中存在关系不能删除节点
- 属性properties
- 标签labels
- 创建节点
- MERGE (p:Person {name: 'Jane Doe'}) RETURN p
- 添加标签
- MATCH (p:Person {name: 'Jane Doe'}) SET p:Developer RETURN p
- 删除标签
- MATCH (p:Person {name: 'Jane Doe'}) REMOVE p:Developer RETURN p
- 删除节点
- MATCH (p:Person {name: 'Jane Doe'}) DETACH DELETE p
- 查询图中存在哪些标签
- CALL db.labels()
- 创建节点
- 删除所有数据
- MATCH (n) DETACH DELETE n
- 先删除关系再删除节点,DETACH 类似于强制删除。
- 节点nodes
- Cypher 通过匹配数据中的模式来工作。MATCH 我们使用关键字从图中检索数据。
- 检索节点
编写 Cypher 代码
于 2023-02-12 20:23:23 首次发布