修改密码

请输入密码
请输入密码 请输入8-64长度密码 和 email 地址不相同 至少包括数字、大写字母、小写字母、半角符号中的 3 个
请输入密码
提交

修改昵称

当前昵称:
提交

申请证书

证书详情

Please complete this required field.

  • Ultipa Graph V4

Standalone

Please complete this required field.

Please complete this required field.

服务器的MAC地址

Please complete this required field.

Please complete this required field.

取消
申请
ID
产品
状态
核数
申请天数
审批时间
过期时间
MAC地址
申请理由
审核信息
关闭
基础信息
  • 用户昵称:
  • 手机号:
  • 公司名称:
  • 公司邮箱:
  • 地区:
  • 语言:
修改密码
申请证书

当前未申请证书.

申请证书
Certificate Issued at Valid until Serial No. File
Serial No. Valid until File

Not having one? Apply now! >>>

ProductName CreateTime ID Price File
ProductName CreateTime ID Price File

No Invoice

v5.0
搜索
    v5.0

      MATCH

      概述

      MATCH语句通过图模式从图中检索数据,并将数据与变量绑定供后续使用,是图数据库查询的基础语句。

      <match statement> ::=
        [ "OPTIONAL" ] "MATCH" <graph pattern> [ <graph pattern yield clause> ]
      
      <graph pattern yield clause> ::=
        "YIELD" <graph pattern yield item> [ { "," <graph pattern yield item> }... ]
      
      <graph pattern yield item> ::=
        <node variable reference> | <edge variable reference> | <path variable reference>
      

      详情

      示例图

      CREATE GRAPH myGraph { 
        NODE User ({name string}),
        NODE Club ({since uint32}),
        EDGE Follows ()-[{createdOn datetime}]->(),
        EDGE Joins ()-[{memberNo uint32}]->()
      } PARTITION BY HASH(Crc32) SHARDS [1]
      

      INSERT (rowlock:User {_id: 'U01', name: 'rowlock'}),
             (brainy:User {_id: 'U02', name: 'Brainy'}),
             (purplechalk:User {_id: 'U03', name: 'purplechalk'}),
             (mochaeach:User {_id: 'U04', name: 'mochaeach'}),
             (lionbower:User {_id: 'U05', name: 'lionbower'}),
             (c01:Club {_id: 'C01', since: 2005}),
             (c02:Club {_id: 'C02', since: 2005}),
             (rowlock)-[:Follows {createdOn: '2024-1-5'}]->(brainy),
             (mochaeach)-[:Follows {createdOn: '2024-2-10'}]->(brainy),
             (brainy)-[:Follows {createdOn: '2024-2-1'}]->(purplechalk),
             (purplechalk)-[:Follows {createdOn: '2024-5-3'}]->(lionbower),
             (brainy)-[:Joins {memberNo: 1}]->(c01),
             (lionbower)-[:Joins {memberNo: 2}]->(c01),
             (mochaeach)-[:Joins {memberNo: 9}]->(c02)
      

      匹配所有点

      使用不含标签或属性过滤的点模式匹配所有点。

      MATCH (n)
      RETURN n
      

      结果:n

      _id _uuid schema
      values
      U05 Sys-gen User {name: "lionbower"}
      U04 Sys-gen User {name: "mochaeach"}
      U03 Sys-gen User {name: "purplechalk"}
      U02 Sys-gen User {name: "Brainy"}
      U01 Sys-gen User {name: "rowlock"}
      C02 Sys-gen Club {since: 2005}
      C01 Sys-gen Club {since: 2005}

      匹配所有边

      使用不含标签或属性过滤的边模式匹配所有边。

      MATCH ()-[e]->()
      RETURN e
      

      结果:e

      _uuid
      _from
      _to
      _from_uuid
      _to_uuid
      schema
      values
      Sys-gen U01 U02 UUID of U01 UUID of U02 Follows {createdOn: "2024-01-05 00:00:00" }
      Sys-gen U02 U03 UUID of U02 UUID of U03 Follows {createdOn: "2024-02-01 00:00:00"}
      Sys-gen U03 U05 UUID of U03 UUID of U05 Follows {createdOn: "2024-05-03 00:00:00"}
      Sys-gen U04 U02 UUID of U04 UUID of U02 Follows {createdOn: "2024-02-10 00:00:00"}
      Sys-gen U02 C01 UUID of U02 UUID of C01 Joins {memberNo: 1}
      Sys-gen U05 C01 UUID of U05 UUID of C01 Joins {memberNo: 2}
      Sys-gen U04 C02 UUID of U04 UUID of C02 Joins {memberNo: 9}

      请留意,如果不指定边方向(出方向>或入方向<),图中每条边都会返回两次。因为如果两条路径的元素序列不同,它们就被视为不同的路径,即(n1)-[e]->(n2)(n2)<-[e]-(n1)是不同的路径。

      MATCH ()-[e]-()
      RETURN e
      

      使用标签匹配

      点模式和边模式支持使用标签表达式指定一个或多个标签。

      获取所有Club点:

      MATCH (n:Club)
      RETURN n
      

      结果:n

      _id _uuid schema
      values
      C02 Sys-gen Club {since: 2005}
      C01 Sys-gen Club {since: 2005}

      获取所有通过FollowsJoins出边与Brainy相连的点:

      MATCH (:User {name: 'Brainy'})-[:Follows|Joins]->(n)
      RETURN n
      

      结果:n

      _id _uuid schema
      values
      U03 Sys-gen User {name: "purplechalk"}
      C01 Sys-gen Club {since: 2005}

      使用属性规范匹配

      可将属性规范置于点模式和边模式中,使用键值对筛选属性。

      获取属性_idsince等于特定值的Club点:

      MATCH (n:Club {_id: 'C01', since: 2005})
      RETURN n
      

      结果:n

      _id _uuid schema
      values
      C01 Sys-gen Club {since: 2005}

      获取C01俱乐部里memberNo等于1的会员信息:

      MATCH (:Club {_id: 'C01'})<-[:Joins {memberNo: 1}]-(n)
      RETURN n
      

      结果:n

      _id _uuid schema
      values
      U02 Sys-gen User {name: "Brainy"}

      使用简写边匹配

      当查询不涉及边标签和属性,后续查询也无需使用边变量时,可使用简写边模式。如有需要,仍可指定边方向。

      获取通过出边与mochaeach相连的点:

      MATCH (:User {name: 'mochaeach'})->(n)
      RETURN n
      

      结果:n

      _id _uuid schema
      values
      U02 Sys-gen User {name: "Brainy"}
      C02 Sys-gen Club {since: 2005}

      匹配路径

      获取mochaeach关注的用户以及这些用户加入的俱乐部:

      MATCH p = (:User {name: 'mochaeach'})-[:Follows]->(:User)-[:Joins]->(:Club)
      RETURN p
      

      结果:p

      使用WHERE从句匹配

      MATCH语句中,WHERE从句可用于元素模式(点、边模式)和带括号路径模式,或紧跟图模式之后使用,用来指定各种查询条件。

      元素模式WHERE从句

      获取1步路径,其中包含Follows出边,且其createdOn属性值大于指定日期:

      MATCH p = ()-[e:Follows WHERE e.createdOn > '2024-4-1']->()
      RETURN p
      

      结果:p

      带括号路径模式WHERE从句

      获取1步或2步路径,包含Follows出边,且其createdOn属性值小于指定日期:

      MATCH p = (()-[e:Follows]->() WHERE e.createdOn < "2024-2-5"){1,2}
      RETURN p
      

      结果:p

      图模式WHERE从句

      获取C01俱乐部中memberNo大于1的会员信息:

      MATCH (c:Club)<-[e:Joins]->(n)
      WHERE c._id = 'C01' AND e.memberNo > 1
      RETURN n
      

      结果:n

      _id _uuid schema
      values
      U05 Sys-gen User {name: "lionbower"}

      匹配带量词路径

      带量词路径模式构造的路径能指定将全部或部分路径重复多次。

      使用带量词边

      获取去重后lionbower的1到3步邻居:

      MATCH (:User {name: 'lionbower'})-[]-{1,3}(n)
      RETURN collect_list(DISTINCT n._id) AS IDs
      

      结果:

      IDs
      ["C01","U01","U02","U03","U04"]

      使用带量词路径

      获取以1或2步子路径开头、同时与点C01相连的路径,其中开头的子路径包括Follows边且其createdOn属性大于指定值:

      MATCH p = (()-[e:Follows]->() WHERE e.createdOn > "2024-1-31"){1,2}()-({_id:"C01"})
      RETURN p
      

      结果:p

      匹配最短路径

      两点间的最短路径是它们之间边数量最少的路径。

      获取lionbowerpurplechalk两点间5步内的最短路径:

      MATCH p = ALL SHORTEST (n1:User)-[]-{,5}(n2:User)
      WHERE n1.name = 'lionbower' AND n2.name = 'purplechalk'
      RETURN p
      

      结果:p

      匹配相交路径

      MATCH语句包含两条或以上有共同元素的路径模式时,最终结果是各个路径模式结果集基于共同元素变量进行Equi-Join(等值连接)后的结果。

      获取Club点(y),保证与其相连的点(x)同时也与rowlockpurplechalk相连:

      MATCH ({name: 'rowlock'})-(x)-({name: 'purplechalk'}), (x)-[]-(y:Club)
      RETURN y
      

      结果:y

      _id _uuid schema
      values
      C01 Sys-gen Club {since: 2005}

      匹配不相交路径

      MATCH语句包含两条或以上没有共同元素的路径模式时,最终结果是对各个路径模式结果集执行笛卡尔积后的结果。

      获取Club点,以及在2024-2-1之后曾关注其他用户的User点:

      MATCH (c:Club), (u:User)-[f:Follows WHERE f.createdOn > '2024-2-1']->()
      RETURN c._id, u.name
      

      结果:

      c._id u.name
      C02 mochaeach
      C02 purplechalk
      C01 mochaeach
      C01 purplechalk

      OPTIONAL MATCH

      MATCHOPTIONAL MATCH的区别在于如何处理没有匹配结果的情况:

      • MATCH:如果没有匹配结果,空返回
      • OPTIONAL MATCH:如果没有匹配结果,返回null

      保留所有子查询记录

      在以下两个查询中,变量u首先在MATCH语句中绑定与Brainy相连的三个点(mocaheachrowlockpurplechalk),第二个MATCH语句引用变量u进行多次子查询,每次使用与u绑定的一个点进行路径模式匹配,没有匹配结果的记录会被移除,除非使用OPTIONAL MATCH返回null值。

      MATCH (:User {name: "Brainy"})-[]-(u:User)
      MATCH (u)-[:Joins]-(c:Club)
      RETURN u.name, c._id
      

      结果:

      u.name c._id
      mochaeach C02

      MATCH (:User {name: "Brainy"})-[:Follows]-(u:User)
      OPTIONAL MATCH (u)-[:Joins]-(c:Club)
      RETURN u.name, c._id
      

      结果:

      u.name c._id
      purplechalk null
      mochaeach C02
      rowlock null

      保持查询运行

      当语句执行结果为空时,由于没有数据流入后续语句,查询会在此终止。

      本查询中,第二个MATCH语句无法找到purplechalk加入俱乐部的匹配结果,生成空工作表,查询因此终止。后续MATCH语句由于无法获取数据,未被执行。

      MATCH (n:User {name: "purplechalk"})
      MATCH (n)-[:Joins]-(c:Club)
      MATCH (m:User {name: "lionbower"})
      RETURN n.name, c._id, m.name
      

      结果:无数据返回

      为避免查询提前终止,可使用OPTIONAL MATCH生成null值,传递给下条语句:

      MATCH (n:User {name: "purplechalk"})
      OPTIONAL MATCH (n)-[:Joins]-(c:Club)
      MATCH (m:User {name: "lionbower"})
      RETURN n.name, c._id, m.name
      

      结果:

      n.name c._id m.name
      purplechalk null lionbower

      检查边是否存在

      返回没有关注者的用户:

      MATCH (n:User)
      OPTIONAL MATCH p = (n)<-[:Follows]-() WHERE p IS NULL
      RETURN COLLECT_LIST(n.name) AS Names
      

      结果:

      Names
      ["mochaeach", "rowlock", "Brainy", "purplechalk", "lionbower"]

      MATCH YIELD

      YIELD从句在MATCH语句中选择点、边或路径变量,允许后续查询继续使用它们;未被选择的变量将不再可用。MATCH语句的YIELD从句不支持使用AS为变量重命名。忽略YIELD从句时,默认所有变量继续传递到后续查询。

      本查询只返回c,因为n没有包含在YIEID中:

      MATCH (n:User)-[:Joins]->(c:Club)
      YIELD c
      RETURN *
      

      结果:c

      _id _uuid schema
      values
      C01 Sys-gen Club {since: 2005}
      C02 Sys-gen Club {since: 2005}
      C01 Sys-gen Club {since: 2005}

      本查询返回n1e,不包括n2

      MATCH (n1:Club)
      MATCH (n2:Club)<-[e:Joins WHERE e.memberNo < 3]-() YIELD e
      RETURN *
      

      n1

      _id _uuid schema
      values
      C01 Sys-gen Club {since: 2005}
      C01 Sys-gen Club {since: 2005}
      C02 Sys-gen Club {since: 2005}
      C02 Sys-gen Club {since: 2005}

      e

      _uuid
      _from
      _to
      _from_uuid
      _to_uuid
      schema
      values
      Sys-gen U02 C01 UUID of U02 UUID of C01 Joins {memberNo: 1}
      Sys-gen U02 C01 UUID of U02 UUID of C01 Joins {memberNo: 1}
      Sys-gen U05 C01 UUID of U05 UUID of C01 Joins {memberNo: 2}
      Sys-gen U05 C01 UUID of U05 UUID of C01 Joins {memberNo: 2}

      本查询有语法错误,因为YIELD从句没有选择n2RETURN语法无法获取它:

      MATCH (n1:User), (n2:Club)
      YIELD n1
      RETURN n1, n2
      
      请完成以下信息后可下载此书
      *
      公司名称不能为空
      *
      公司邮箱必须填写
      *
      你的名字必须填写
      *
      你的电话必须填写
      *
      你的电话必须填写