zoukankan      html  css  js  c++  java
  • Cypher-(8)-投射和过滤

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

    一,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
    

    img

    2,限制返回的结果

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

    三,unwind子句

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

    1,拆开列表

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

    2,拆开嵌套列表

    WITH [[1, 2],[3, 4], 5] AS nestedUNWIND nested AS xUNWIND x AS yRETURN y
    

    3,Collect函数

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

    WITH [1, 1, 2, 2] AS collUNWIND coll AS xWITH DISTINCT xRETURN 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:SwedishRETURN n.name, n.age
    

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

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

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

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

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

    WITH 'AGE' AS propnameMATCH (n)WHERE n[toLower(propname)]< 30RETURN 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.ageMATCH (n)WHERE n.name ENDS WITH 'ter'RETURN n.name, n.ageMATCH (n)WHERE n.name CONTAINS 'ete'RETURN n.name, n.age
    

    8,正则匹配

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

    MATCH (n)WHERE n.name =~ 'Tob.*'RETURN n.name, n.ageMATCH (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

    转载于:https://www.cnblogs.com/ljhdo/p/10917618.html

  • 相关阅读:
    js流程控制语句
    js流程控制语句
    js流程控制语句
    js流程控制语句
    Nginx入门及如何反向代理解决生产环境跨域问题
    Nginx入门及如何反向代理解决生产环境跨域问题
    Nginx入门及如何反向代理解决生产环境跨域问题
    arcserver开发小结(三)
    xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!
    xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!
  • 原文地址:https://www.cnblogs.com/weijiqian/p/14840796.html
Copyright © 2011-2022 走看看