修改密码

请输入密码
请输入密码 请输入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> ::= <element variable> | <path variable>
      

      详情

      • 可以将MATCH关键词OPTIONAL连用。MATCHOPTIONAL MATCH的主要区别在于对不匹配模式的处理:
        • MATCH:如果模式不匹配,无记录返回。
        • OPTIONAL MATCH:如果模式不匹配,返回null
      • MATCH语句支持在图模式中使用WHERE从句设定搜索条件。
      • MATCH语句支持图模式YIELD从句以选择变量用于后续查询。

      示例图集

      以下示例根据该图集运行:

      在空图集中运行以下语句创建示例图集:

      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 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 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 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 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 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}
      Sys-gen U04 C02 UUID of U04 UUID of C02 Joins {memberNo: 9}
      Sys-gen U04 C02 UUID of U04 UUID of C02 Joins {memberNo: 9}

      上述查询并未指定边方向,因此,图中的每条边都返回了两次。当路径的元素序列不同时,我们认为这两条路径是不同的。

      若想返回图中所有去重边,可以使用出边符号(>)或入边符号(<)指定边的方向。

      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}

      通过标签匹配

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

      本条查询获取所有标签为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}

      通过键值属性规范匹配

      可将元素属性规范置于点模式和边模式中,使用联合等式筛选具有特定键值对的点和边。

      本条查询获取标签为Clubcodesince具有特定属性值的点:

      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 {code: '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所关注用户的name,以及这些用户加入的俱乐部的code

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

      结果:

      p
      (:User {_id: "U04", name: "mochaeach"})-[:Follows {createdOn: "2024-2-10"}]->(:User {_id: "U02", name: "Brainy"})-[:Joins {memberNo: 1}]->(:Club {_id: "C01", since: 2005})

      通过WHERE从句匹配

      WHERE从句可以选择性地用于元素模式、带括号的路径表达式,或紧跟MATCH语句的图模式之后,用来指定各种查询条件。

      元素模式中的WHERE从句

      本条查询获取1步路径,该路径包含标签为Follows的出边,且边的createdOn属性值大于指定日期:

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

      结果:

      p
      (:User {_id: "U03", name: "purplechalk"})-[:Follows {createdOn: "2024-5-3"}]->(:User {_id: "U05", name: "lionbower"})

      带括号的路径模式中的WHERE从句

      本条查询获取1步或2步路径,该路径包含标签为Follows的边,且边的createdOn属性值小于指定日期:

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

      结果:

      p
      (:User {_id: "U01", name: "rowlock"})-[:Follows {createdOn: "2024-1-5"}]->(:User {_id: "U02", name: "Brainy"})
      (:User {_id: "U01", name: "rowlock"})-[:Follows {createdOn: "2024-1-5"}]->(:User {_id: "U02", name: "Brainy"})-[:Follows {createdOn: "2024-2-1"}]->(:User {_id: "U03", name: "purplechalk"})
      (:User {_id: "U02", name: "Brainy"})-[:Follows {createdOn: "2024-2-1"}]->(:User {_id: "U03", name: "purplechalk"})

      图模式中的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 DISTINCT n._id AS IDs
      

      结果:

      IDs
      U03
      U02
      U01
      U04
      C01

      使用量化路径

      本条查询获取的目标路径以1或2步子路径开头,其中包括标签为Follows的边且createdOn属性值大于指定值,此外,这些子路径必须与点C01相连:

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

      结果:

      p
      (:User {_id: "U02", name: "Brainy"})-[:Follows {createdOn: "2024-02-01"}]->(:User {_id: "U03", name: "purplechalk"})-[:Follows {createdOn: "2024-05-03"}]->(:User {_id: "U05", name: "lionbower"})-[:Joins {memberNo: 2}]->(:Club {_id: "C01",since: 2005})
      (:User {_id: "U03", name: "purplechalk"})-[:Follows {createdOn: "2024-05-03"}]->(:User {_id: "U05", name: "lionbower"})-[:Joins {memberNo: 2}]->(:Club {_id: "C01",since: 2005})
      (:User {_id: "U04", name: "mochaeach"})-[:Follows {createdOn: "2024-02-10"}]->(:User {_id: "U02", name: "Brainy"})-[:Joins {memberNo: 1}]->(:Club {_id: "C01",since: 2005})

      匹配最短路径

      两点间的最短路径是两点间边数最少的路径。

      本条查询获取lionbowerpurplechalk两点间5步以内的最短路径: This query retrieves all the shortest paths between lionbower and purplechalk within 5 hops:

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

      结果:

      p
      (:User {_id: "U05", name: "lionbower"})-[:Follows {createdOn: "2024-5-3"}]->(:User {_id: "U03", name: "purplechalk"})

      匹配多条连通路径

      MATCH语句包含与共同变量相连的两条及以上路径模式时,则对不同路径模式结果集的共同变量使用等值连接,生成最终结果。

      本条查询获取标签为Club的点,其中,与该点相连的点同时与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

      保留所有子查询的记录

      在以下的两条查询中,变量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"]

      图模式YIELD从句

      可以通过图模式YIELD从句选择在后续查询中使用哪些变量。

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

      结果:n

      _id _uuid schema
      values
      C01 Sys-gen Club {since: 2005}
      C02 Sys-gen Club {since: 2005}
      C01 Sys-gen Club {since: 2005}
      请完成以下信息后可下载此书
      *
      公司名称不能为空
      *
      公司邮箱必须填写
      *
      你的名字必须填写
      *
      你的电话必须填写
      *
      你的电话必须填写