Skip to content

关系操作

创建关系

基本语法

cypher
CREATE (源节点)-[关系变量:关系类型 {属性:, ...}]->(目标节点)

示例

  1. 在已存在的节点之间创建关系

    cypher
    // 先匹配两个节点,然后创建关系
    MATCH (a:Person {name: 'John'}), (b:Person {name: 'Alice'})
    CREATE (a)-[r:FRIENDS_WITH {since: 2010}]->(b)
    RETURN a, r, b
  2. 创建节点的同时创建关系

    cypher
    // 创建两个新节点和它们之间的关系
    CREATE (a:Person {name: 'John'})-[r:FRIENDS_WITH {since: 2010}]->(b:Person {name: 'Alice'})
    RETURN a, r, b
  3. 创建多个关系

    cypher
    MATCH (a:Person {name: 'John'}), (b:Person {name: 'Alice'}), (c:Person {name: 'Bob'})
    CREATE (a)-[r1:FRIENDS_WITH {since: 2010}]->(b),
           (a)-[r2:FRIENDS_WITH {since: 2012}]->(c)
    RETURN a, r1, b, r2, c
  4. 创建双向关系

    cypher
    MATCH (a:Person {name: 'John'}), (b:Person {name: 'Alice'})
    CREATE (a)-[r1:FRIENDS_WITH {since: 2010}]->(b),
           (b)-[r2:FRIENDS_WITH {since: 2010}]->(a)
    RETURN a, r1, b, r2

查询关系

基本语法

cypher
MATCH (源节点)-[关系变量:关系类型]->(目标节点)
WHERE 条件
RETURN 源节点, 关系变量, 目标节点

示例

  1. 查询所有关系

    cypher
    // 查询所有关系
    MATCH ()-[r]->()
    RETURN r
    
    // 查询所有 FRIENDS_WITH 关系
    MATCH ()-[r:FRIENDS_WITH]->()
    RETURN r
  2. 根据关系类型查询

    cypher
    MATCH (a:Person)-[r:WORKS_AT]->(b:Company)
    RETURN a, r, b
  3. 根据关系属性查询

    cypher
    MATCH (a:Person)-[r:FRIENDS_WITH]->(b:Person)
    WHERE r.since > 2009
    RETURN a, r, b
  4. 查询特定路径的关系

    cypher
    MATCH (a:Person {name: 'John'})-[r:FRIENDS_WITH*1..2]->(b:Person)
    RETURN a, r, b
  5. 查询关系的方向

    cypher
    // 查询从 John 出发的关系
    MATCH (a:Person {name: 'John'})-[r]->(b)
    RETURN a, r, b
    
    // 查询指向 John 的关系
    MATCH (a)-[r]->(b:Person {name: 'John'})
    RETURN a, r, b
    
    // 查询无方向的关系
    MATCH (a:Person {name: 'John'})-[r]-(b)
    RETURN a, r, b

更新关系

基本语法

cypher
MATCH (源节点)-[关系变量:关系类型]->(目标节点)
WHERE 条件
SET 关系变量.属性 =
RETURN 源节点, 关系变量, 目标节点

示例

  1. 更新关系属性

    cypher
    MATCH (a:Person {name: 'John'})-[r:FRIENDS_WITH]->(b:Person {name: 'Alice'})
    SET r.since = 2009, r.strength = 5
    RETURN a, r, b
  2. 使用映射更新关系属性

    cypher
    MATCH (a:Person {name: 'John'})-[r:FRIENDS_WITH]->(b:Person {name: 'Alice'})
    SET r = {since: 2009, strength: 5, status: 'active'}
    RETURN a, r, b
  3. 添加新属性

    cypher
    MATCH (a:Person {name: 'John'})-[r:FRIENDS_WITH]->(b:Person {name: 'Alice'})
    SET r.strength = 5
    RETURN a, r, b
  4. 移除属性

    cypher
    MATCH (a:Person {name: 'John'})-[r:FRIENDS_WITH]->(b:Person {name: 'Alice'})
    REMOVE r.strength
    RETURN a, r, b

删除关系

基本语法

cypher
MATCH (源节点)-[关系变量:关系类型]->(目标节点)
WHERE 条件
DELETE 关系变量

示例

  1. 删除特定关系

    cypher
    MATCH (a:Person {name: 'John'})-[r:FRIENDS_WITH]->(b:Person {name: 'Alice'})
    DELETE r
  2. 删除所有特定类型的关系

    cypher
    MATCH ()-[r:FRIENDS_WITH]->()
    DELETE r
  3. 删除节点的所有关系

    cypher
    MATCH (a:Person {name: 'John'})-[r]-()
    DELETE r
  4. 删除关系的同时删除节点

    cypher
    MATCH (a:Person {name: 'John'})
    DETACH DELETE a

小结

关系操作是图数据库的核心特性,通过关系可以表示和查询数据之间的复杂连接。通过本文的介绍,您应该掌握了关系操作的基本语法和技巧。在接下来的章节中,我们将介绍属性操作,这是管理节点和关系数据的重要部分。