zoukankan      html  css  js  c++  java
  • Neo4j 第八篇:投射和过滤

    投射子句用于定义如何返回数据集,并可以对返回的表达式设置别名,而过滤子句用于对查询的结果集按照条件进行过滤

    一,Return子句

    使用return子句返回节点,关系和关系。

    1,返回节点

    MATCH (n { name: 'B' })
    RETURN n

    2,返回关系

    MATCH (n { name: 'A' })-[r:KNOWS]->(c)
    RETURN r

    3,返回属性

    MATCH (n { name: 'A' })
    RETURN n.name

    4,返回所有元素

    MATCH p =(a { name: 'A' })-[r]->(b)
    RETURN *

    5,为属性设置别名

    MATCH (a { name: 'A' })
    RETURN a.age AS SomethingTotallyDifferent

    6,返回谓词(predicate),文本(literal)或模式(pattern)

    MATCH (a { name: 'A' })
    RETURN a.age > 30, "I'm a literal",(a)-->()

    7,使用distinct关键字返回不重复值

    MATCH (a { name: 'A' })-->(b)
    RETURN DISTINCT b

    二,with 子句

    一个查询(Query)语句有很多查询子句,每一个查询子句按照特定的顺序执行,每一个子句是查询的一部分(Part)。with子句的作用是把上一个查询的结果进行处理,作为下一个查询的数据源,也就是说,在上一个查询的结果输出到客户端之前,把结果传递到后续的子句中去。

    1,对聚合的结果进行过滤

    聚合的结果必须通过with子句才能被过滤,例如,with子句保留otherPerson,并新增聚合查询count(*),通过where子句过滤,返回查询结果:Anders。

    MATCH (david { name: 'David' })--(otherPerson)-->()
    WITH otherPerson, count(*) AS foaf
    WHERE foaf > 1
    RETURN otherPerson.name

    2,限制返回的结果

    MATCH (n { name: 'Anders' })--(m)
    WITH m
    ORDER BY m.name DESC LIMIT 1
    MATCH (m)--(o)
    RETURN o.name

    三,unwind子句

    unwind子句用于把list格式的字符串拆开为行的序列

    1,拆开列表

    UNWIND [1, 2, 3, NULL ] AS x
    RETURN x, 'val' AS y

    2,拆开嵌套列表

    WITH [[1, 2],[3, 4], 5] AS nested
    UNWIND nested AS x
    UNWIND x AS y
    RETURN y

    3,Collect函数

    collect函数用于把值组装成列表

    WITH [1, 1, 2, 2] AS coll
    UNWIND coll AS x
    WITH DISTINCT x
    RETURN collect(x) AS setOfVals

    四,Where子句

     使用Where子句对查询的结果进行过滤

    1,按照逻辑表达式来过滤

    MATCH (n)
    WHERE n.name = 'Peter' XOR (n.age < 30 AND n.name = 'Tobias') OR NOT (n.name = 'Tobias' OR n.name = 'Peter')
    RETURN n.name, n.age

    2,按照节点的标签来过滤

    MATCH (n)
    WHERE n:Swedish
    RETURN n.name, n.age

    3,按照节点的属性来过滤

    MATCH (n)
    WHERE n.age < 30
    RETURN n.name, n.age

    4,按照关系的属性来过滤

    MATCH (n)-[k:KNOWS]->(f)
    WHERE k.since < 2000
    RETURN f.name, f.age, f.email

    5,按照动态计算的属性来计算

    WITH 'AGE' AS propname
    MATCH (n)
    WHERE n[toLower(propname)]< 30
    RETURN n.name, n.age

    6,是否存在属性

    MATCH (n)
    WHERE exists(n.belt)
    RETURN n.name, n.belt

    7,字符串匹配

    对字符串进行匹配:starts with、ends with,contains

    MATCH (n)
    WHERE n.name STARTS WITH 'Pet'
    RETURN n.name, n.age
    
    MATCH (n)
    WHERE n.name ENDS WITH 'ter'
    RETURN n.name, n.age
    
    MATCH (n)
    WHERE n.name CONTAINS 'ete'
    RETURN n.name, n.age

    8,正则匹配

    使用 =~ 'regexp' 匹配正则 ,如果正则表达式以(?i)开头,表示整个正则是大小写敏感的。

    MATCH (n)
    WHERE n.name =~ 'Tob.*'
    RETURN n.name, n.age
    
    MATCH (n)
    WHERE n.name =~ '(?i)ANDR.*'
    RETURN n.name, n.age

    9,匹配路径模式

    MATCH (tobias { name: 'Tobias' }),(others)
    WHERE others.name IN ['Andres', 'Peter'] AND (tobias)<--(others)
    RETURN others.name, others.age

    使用not来排除路径模式:

    MATCH (persons),(peter { name: 'Peter' })
    WHERE NOT (persons)-->(peter)
    RETURN persons.name, persons.age

    使用属性来匹配路径:

    MATCH (n)
    WHERE (n)-[:KNOWS]-({ name: 'Tobias' })
    RETURN n.name, n.age

    使用关系类型来匹配路径:

    MATCH (n)-[r]->()
    WHERE n.name='Andres' AND type(r)=~ 'K.*'
    RETURN type(r), r.since

    10,列表

    使用IN操作符表示匹配列表中的元素

    MATCH (a)
    WHERE a.name IN ['Peter', 'Tobias']
    RETURN a.name, a.age

    11,缺失值

    如果属性值缺失,那么属性值默认值是null,null和任何值比较都是false;可以使用is not null 或 is null来判断是否为null

    MATCH (person)
    WHERE person.name = 'Peter' AND person.belt IS NULL 
    RETURN person.name, person.age, person.belt

    五,排序

    使用order by对查询的结果进行排序,默认是升序,使用关键字desc使Cypher按照降序进行排序。

    1,按照节点的属性进行升序排序

    MATCH (n)
    RETURN n.name, n.age
    ORDER BY n.name

    2,按照节点的属性值进行降序排序

    MATCH (n)
    RETURN n.name, n.age
    ORDER BY n.name DESC

    六,SKIP和LIMIT

     SKIP是跳过前N行,LIMIT是限制返回的数量

    1,跳过前3行

    MATCH (n)
    RETURN n.name
    ORDER BY n.name
    SKIP 3

    2,跳过前3行,返回第4和5行

    MATCH (n)
    RETURN n.name
    ORDER BY n.name
    SKIP 3
    LIMIT 2

     

    参考文档:

    Cypher Clauses

  • 相关阅读:
    Day Five
    Day Four
    JS中attr和prop区别
    layui单选框radio使用form.render() 更新渲染失效的原因
    MySql的时区(serverTimezone)问题
    com.mysql.jdbc.Driver 和 com.mysql.cj.jdbc.Driver的区别 serverTimezone设定
    idea使用maven下载jar包,出现证书校验问题问题,unable to find valid certification path to requested target
    java实体类为什么要实现Serializeable 序列化呢?
    IntelliJ IDEA 2017 提示“Unmapped Spring configuration files found.Please configure Spring facet.”解决办法
    JS三个等号"==="是什么意思
  • 原文地址:https://www.cnblogs.com/ljhdo/p/10917618.html
Copyright © 2011-2022 走看看