nebulagraph图数据库中的Match查询汇总

  • MATCH

    MATCH <pattern> [<clause_1>]  RETURN <output>  [<clause_2>];
    
    模式示例说明
    匹配点 (v) 用户可以在一对括号中使用自定义变量来表示模式中的点。例如(v)
    匹配 Tag MATCH (v:player) RETURN v 用户可以在点的右侧用:<tag_name>表示模式中的 Tag。
    匹配多 Tag MATCH (v:player:team) RETURN v 用户可以用英文冒号(:)匹配多 Tag 的点。
    匹配点的属性 MATCH (v:player{name:"Tim Duncan"}) RETURN v

    MATCH (v) WITH v, properties(v) as props, keys(properties(v)) as kk WHERE [i in kk where props[i] == "Tim Duncan"] RETURN v
    用户可以在 Tag 的右侧用{<prop_name>: <prop_value>}表示模式中点的属性;或者不指定 Tag 直接匹配点的属性。
    匹配单点 ID MATCH (v) WHERE id(v) == 'player101' RETURN v 用户可以使用点 ID 去匹配点。id()函数可以检索点的 ID。
    匹配多点 ID MATCH (v:player { name: 'Tim Duncan' })--(v2) WHERE id(v2) IN ["player101", "player102"] RETURN v2 要匹配多个点的 ID,可以用WHERE id(v) IN [vid_list]
    匹配连接的点 MATCH (v:player{name:"Tim Duncan"})--(v2) RETURN v2.player.name AS Name 用户可以使用--符号表示两个方向的边,并匹配这些边连接的点。用户可以在--符号上增加<>符号指定边的方向。
    匹配路径 MATCH p=(v:player{name:"Tim Duncan"})-->(v2) RETURN p 连接起来的点和边构成了路径。用户可以使用自定义变量命名路径。
    匹配边 MATCH (v:player{name:"Tim Duncan"})-[e]-(v2) RETURN e
    MATCH ()<-[e]-() RETURN e
    除了用----><--表示未命名的边之外,用户还可以在方括号中使用自定义变量命名边。例如-[e]-
    匹配 Edge type MATCH ()-[e:follow]->() RETURN e 和点一样,用户可以用:<edge_type>表示模式中的 Edge type,例如-[e:follow]-
    匹配边的属性 MATCH (v:player{name:"Tim Duncan"})-[e:follow{degree:95}]->(v2) RETURN e

    MATCH ()-[e]->() WITH e, properties(e) as props, keys(properties(e)) as kk WHERE [i in kk where props[i] == 90] RETURN e
    用户可以用{<prop_name>: <prop_value>}表示模式中 Edge type 的属性,例如[e:follow{likeness:95}];或者不指定 Edge type 直接匹配边的属性。
    匹配多个 Edge type MATCH (v:player{name:"Tim Duncan"})-[e:follow | :serve]->(v2) RETURN e 使用|可以匹配多个 Edge type,例如[e:follow | :serve]。第一个 Edge type 前的英文冒号(:)不可省略,后续 Edge type 前的英文冒号可以省略,例如[e:follow | serve]
    匹配多条边 MATCH (v:player{name:"Tim Duncan"})-[]->(v2)<-[e:serve]-(v3) RETURN v2, v3 用户可以扩展模式,匹配路径中的多条边。
    匹配定长路径 MATCH p=(v:player{name:"Tim Duncan"})-[e:follow*2]->(v2) RETURN DISTINCT v2 AS Friends 用户可以在模式中使用:<edge_type>*<hop>匹配定长路径。hop必须是一个非负整数。e的数据类型是列表。
    匹配变长路径 MATCH p=(v:player{name:"Tim Duncan"})-[e:follow*1..3]->(v2) RETURN v2 AS Friends minHop:可选项。表示路径的最小长度。minHop必须是一个非负整数,默认值为 1。
    maxHop:可选项。表示路径的最大长度。maxHop必须是一个非负整数,默认为无穷大。e的数据类型是列表。
    匹配多个 Edge type 的变长路径 MATCH p=(v:player{name:"Tim Duncan"})-[e:follow | serve*2]->(v2) RETURN DISTINCT v2 用户可以在变长或定长模式中指定多个 Edge type。hopminHopmaxHop对所有 Edge type 都生效。e的数据类型是列表。
    检索点或边的信息 MATCH (v:player{name:"Tim Duncan"}) RETURN v
    MATCH (v:player{name:"Tim Duncan"})-[e]->(v2) RETURN e
    使用RETURN {<vertex_name> | <edge_name>}检索点或边的所有信息。
    检索点 ID MATCH (v:player{name:"Tim Duncan"}) RETURN id(v) 使用id()函数检索点 ID。
    检索 Tag MATCH (v:player{name:"Tim Duncan"}) RETURN labels(v) 使用labels()函数检索点上的 Tag 列表。
    检索列表labels(v)中的第 N 个元素,可以使用labels(v)[n-1]
    检索点或边的单个属性 MATCH (v:player{name:"Tim Duncan"}) RETURN v.player.age 使用RETURN {<vertex_name> | <edge_name>}.<property>检索单个属性。
    使用AS设置属性的别名。
    检索点或边的所有属性 MATCH p=(v:player{name:"Tim Duncan"})-[]->(v2) RETURN properties(v2) 使用properties()函数检索点或边的所有属性。
    检索 Edge type MATCH p=(v:player{name:"Tim Duncan"})-[e]->() RETURN DISTINCT type(e) 使用type()函数检索匹配的 Edge type。
    检索路径 MATCH p=(v:player{name:"Tim Duncan"})-[*3]->() RETURN p 使用RETURN <path_name>检索匹配路径的所有信息。
    检索路径中的点 MATCH p=(v:player{name:"Tim Duncan"})-[]->(v2) RETURN nodes(p) 使用nodes()函数检索路径中的所有点。
    检索路径中的边 MATCH p=(v:player{name:"Tim Duncan"})-[]->(v2) RETURN relationships(p) 使用relationships()函数检索路径中的所有边。
    检索路径长度 MATCH p=(v:player{name:"Tim Duncan"})-[*..2]->(v2) RETURN p AS Paths, length(p) AS Length 使用length()函数检索路径的长度。
  • OPTIONAL MATCH
    模式示例说明
    作为MATCH语句的可选项去匹配图数据库中的模式 MATCH (m)-[]->(n) WHERE id(m)=="player100" OPTIONAL MATCH (n)-[]->(l) RETURN id(m),id(n),id(l) 如果图数据库中没有对应的模式,对应的列返回NULL
posted @ 2025-08-11 11:32  郭慕荣  阅读(21)  评论(0)    收藏  举报