• Neo4j基本用法


    Cypher提供了一个方便的方法去表示查询和其他的neo4j行为,Cypher不仅可以完成工作,也可以在产品中有足够快的速度。也可以 基于java语言来处理查询用例,使用java API可以自定义遍历方法。

    Cypher语言进行查询的步骤为:语法分析和验证查询,生成执行方案,定位初始节点,选择和遍历关系,改变或者返回结果。在图数据库中进行强力搜索是非常消耗时间的,最好有一初始节点,或者有相应的索引。

    在图数据库中,有联系的节点以及联系所组成的模式(pattern)是最有价值的东西,提供了最多的信息。Cypher语言正是基于模式的语言,可以非常直观的表达模式。

    Cypher基本语法

    节点语法:(),(matrix),(:movie),(matrix:Movie{title:“the matix”,released:1997})

    关系语法: -[role:ACTED_IN{roles:[“neo”]}]->

    模式语法:(:people)-[:like]->(:people)

    模式可以赋值给标示符:like=(:people)-[:like]->(:people)

    在模式中使用的节点表示数据库中0到多个物理节点,关系代表数据库中的零到多个关系,模式表示0到多个路径。

    Cypher子句

    Create子句:创建新的节点,关系,模式

    CREATE (a:Person { name:"Tom Hanks",   born:1956 })-[r:ACTED_IN { roles: ["Forrest"]}]->(m:Movie { title:"Forrest Gump",released:1994 })

    CREATE (d:Person { name:"Robert Zemeckis", born:1951 })-[:DIRECTED]->(m) RETURN a,d,r,m

    Match子句:类似于查找

    MATCH (p:Person { name:"Keanu Reeves" }) RETURN p
    MATCH (p:Person { name:"Tom Hanks" })-[r:ACTED_IN]->(m:Movie)
    RETURN m.title, r.roles

    组合子句:

    MATCH (p:Person { name:"Tom Hanks" })

    CREATE (m:Movie { title:"Cloud Atlas",released:2012 })

    CREATE (p)-[r:ACTED_IN { roles: ['Zachry']}]->(m)

    RETURN p,r,m

    Merge子句:结合了create和match子句的功能,首先查找是否有符合模式的节点或者路径,如果没有符合模式条件的结果,则创建符合模式的节点或者路劲。同时提供了on create子句,可以在创建节点或者关系的情况下执行特定的操作。Merge子句

    MERGE (m:Movie { title:"Cloud Atlas" })

    ON CREATE SET m.released = 2012

    RETURN m

    MATCH (m:Movie { title:"Cloud Atlas" })

    MATCH (p:Person { name:"Tom Hanks" })

    MERGE (p)-[r:ACTED_IN]->(m)

    ON CREATE SET r.roles =['Zachry']

    RETURN p,r,m

    获取想要的结果

    过滤结果:where子句

    MATCH (m:Movie)

    WHERE m.title = "The Matrix"

    RETURN m

    //等价用法

    MATCH (m:Movie { title: "The Matrix" })
    RETURN m
    //返回没有导演过电影的演员及其所演过的电影
    MATCH (p:Person)-[:ACTED_IN]->(m)
    WHERE NOT (p)-[:DIRECTED]->()     //没有导演过电影的人才满足
    RETURN p,m

    在结果中使用表达式:组织返回的结果的形式

    MATCH (p:Person) 
    RETURN p, p.name AS name, upper(p.name), coalesce(p.nickname,"n/a") AS nickname, { name: p.name,   label:head(labels(p))} AS person

    聚合数据:对返回的结果进行统计

    //统计演员和导演合作的次数
    MATCH (actor:Person)-[:ACTED_IN]->(movie:Movie)<-[:DIRECTED]-(director:Person) 
    RETURN actor,director,count(*) AS collaborations

    排序

    MATCH (a:Person)-[:ACTED_IN]->(m:Movie) 
    RETURN a,count(*) AS appearances 
    ORDER BY appearances DESC LIMIT 10;

    混合子句:union

    MATCH (p:Person)-[r:ACTED_IN]->(m:Movie) RETURN p,type(r) AS rel,m
    UNION 
    MATCH (p:Person)-[r:DIRECTED]->(m:Movie) RETURN p,type(r) AS rel,m

    标签,约束和索引

    标签在图数据库中可以用来组织节点。它们也被用来限定查询,定义约束和建立索引。

    CREATE CONSTRAINT ON (movie:Movie) ASSERT movie.title IS UNIQUE
  • 相关阅读:
    锁定/解锁账户BAPI
    ME5A报表增强
    PS 独立集中标识下修改项目采购类型增强
    生产版本BAPI
    生产订单工艺路线修改
    销售订单BAPI增强
    Office RTF远程模板注入
    CVE20211732 LPE漏洞分析
    C/C++ Qt 数据库与ComBox多级联动
    C/C++ Qt 数据库SqlRelationalTable关联表
  • 原文地址:https://www.cnblogs.com/libs5510/p/4782331.html
Copyright © 2020-2023  润新知