编写 Cypher 代码

  • 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()
        • 嵌套模式过滤
          • 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 两个节点之间的关系。
      • 必须引用要为其创建关系的两个节点。
      • 必须具有类型和方向
      • ** 无需在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
      • 设置多个属性
        • 需要设置多个属性,则用逗号 (,) 将它们分隔开。
          • 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 类似于强制删除。
  • 检索节点
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值