美文网首页
Cypher 通识说明

Cypher 通识说明

作者: 走在成长的道路上 | 来源:发表于2022-01-14 11:52 被阅读0次

    Cypher 介绍

    Cypher 类似 SQL 语言,也保留了些 SQL 关键词比如 WHEREORDER BY 等,而模式匹配则引入 SparQL 语法。

    建立节点及构建关系

    # 使用 CREATE 语句来创建节点并构建其间关联关系
    CREATE (adam:User { name: 'Adam' }),(pernilla:User { name: 'Pernilla' }),(david:User { name: 'David'  }), (adam)-[:FRIEND]->(pernilla),(pernilla)-[:FRIEND]->(david)
    

    查询语句

    Cypher 关键信息属性说明如下:

    • MATCH 表示图匹配模式,其中 () 表示节点,{} 表示节点中的属性值, [] 表示关联关系 -> 表示关系方向 - 表示有关联关系;其中 WITH 可接聚合相关的数据内容
    • WHERE 表示字段数据匹配条件
    • RETURN 表示返回数据

    因此,基础格式为 MATCH <图节点匹配逻辑> WHERE <节点数据匹配条件> RETURN <返回数据>,例如匹配 John 二度朋友的列表:

    # 匹配 john 节点 :friend 关系 的节点的  :friend 关系 的节点 fof
    MATCH (john {name: 'John'})-[:friend]->()-[:friend]->(fof)
    RETURN john.name, fof.name
    
    # 过滤数据用户名称在指定范围内,且其名称符合 S.* 的数据列表
    MATCH (user)-[:friend]->(follower)
    WHERE user.name IN ['Joe', 'John', 'Sara', 'Maria', 'Steve'] AND follower.name =~ 'S.*'
    RETURN user.name, follower.name
    
    # 聚合名字为 John 的朋友数量,输出节点及其数量,带分页
    MATCH (n {name: 'John'})-[:FRIEND]-(friend)
    WITH n, count(friend) as friendsCount
    WHERE friendsCount > 3
    RETURN n, friendsCount
    SKIP 10
    LIMIT 20
    

    更新数据

    使用 SET 语句来更新节点数据

    # 聚合名字为 John 的朋友数量,更新节点中 friendCount 值,并输出数量
    MATCH (n {name: 'John'})-[:FRIEND]-(friend)
    WITH n, count(friend) as friendsCount
    SET n.friendCount = friendsCount
    # RETURN 语句可以省略
    RETURN n.friendsCount
    

    Cypher 语句例子

    # 导入 movies 数据
    LOAD CSV WITH HEADERS FROM "http://neo4j.com/docs/2.3.0/csv/query-tuning/movies.csv" AS line
    # 与现有数据进行合并,合并条件为 MERGE 之后的节点描述模板
    MERGE (m:Movie { title:line.title })
    # 匹配到上述 merge 条件之后,对相应的节点创建更新属性信息
    ON CREATE SET m.released = toInt(line.released), m.tagline = line.tagline
    
    # 导入 actors 数据
    LOAD CSV WITH HEADERS FROM 'http://neo4j.com/docs/2.3.0/csv/query-tuning/actors.csv' AS line
    MATCH (m:Movie { title:line.title })
    MERGE (p:Person { name:line.name })
    ON CREATE SET p.born = toInt(line.born)
    MERGE (p)-[:ACTED_IN { roles:split(line.roles,";")}]->(m)
    
    # 导入 directors 数据
    LOAD CSV WITH HEADERS FROM 'http://neo4j.com/docs/2.3.0/csv/query-tuning/directors.csv' AS line
    MATCH (m:Movie { title:line.title })
    MERGE (p:Person { name:line.name })
    ON CREATE SET p.born = toInt(line.born)
    MERGE (p)-[:DIRECTED]->(m)
    
    # 调试
    PROFILE
    MATCH (p:Person { name:"Tom Hanks" })
    RETURN p
    

    MERGESQLUPDATE 类似,按条件更新节点数据,其后可接 ON CREATE SET(创建属性) 和 ON MATCH SET (更新属性),例如:

    # 合并条件为 名为 Keanu Reeves 的 Person
    MERGE (keanu:Person { name:'Keanu Reeves' })
    ON CREATE SET keanu.created = timestamp()
    ON MATCH SET keanu.lastSeen = timestamp()
    RETURN keanu.name, keanu.created, keanu.lastSeen
    

    删除数据

    # 删除节点
    MATCH (n:Useless)
    DELETE n
    
    # 删除关系
    MATCH ()-[r:RELEASED]-() 
    DELETE r
    
    # 删除节点及其关系
    MATCH (n { name:'Andres' })
    DETACH DELETE n
    
    # 删除属性
    MATCH (andres { name: 'Andres' })
    REMOVE andres.age
    RETURN andres
    

    参考

    相关文章

      网友评论

          本文标题:Cypher 通识说明

          本文链接:https://www.haomeiwen.com/subject/iqhacrtx.html