请求告知Memgraph图数据库支持的全部变量展开类型
Memgraph支持的变量展开类型
Memgraph基于标准Cypher查询语言,在图遍历中支持多种实用的变量展开类型,以下是核心类型及示例:
1. 基础节点与关系变量展开
这是最常用的类型,遍历过程中将匹配到的节点、关系直接绑定到指定变量,后续可直接引用这些变量做计算或过滤。
MATCH (u:User)-[f:FRIENDS_WITH]->(v:User) RETURN u.name, f.since, v.name;
这里u(起始用户节点)、f(好友关系)、v(目标用户节点)都是展开的变量,存储了遍历到的对应图元素。
2. 路径变量展开
通过可变长度路径语法*将整条遍历路径绑定到变量,方便后续操作路径内的所有节点或关系。支持指定路径长度范围(如1..3表示1到3步,*表示任意长度)。
MATCH p=(u:User)-[*1..3]->(v:User) RETURN nodes(p), relationships(p);
变量p存储了从u到v的完整路径,可通过nodes(p)提取路径上的所有节点,relationships(p)提取所有关系。
3. 可选变量展开
使用OPTIONAL MATCH子句处理可能不存在的路径,当没有匹配到对应模式时,展开的变量会被设为NULL,避免过滤掉原本存在的节点。
MATCH (u:User {name: "Alice"}) OPTIONAL MATCH (u)-[:FOLLOWS]->(v:User) RETURN u.name, COALESCE(v.name, "No following");
如果Alice没有关注任何用户,v变量会是NULL,通过COALESCE可以返回默认值。
4. 带过滤条件的变量展开
在匹配过程中通过WHERE子句对展开的变量添加过滤规则,只保留符合条件的图元素。
MATCH (u:User)-[f:FRIENDS_WITH]->(v:User) WHERE u.age > 30 AND f.since > date("2020-01-01") RETURN u.name, v.name;
这里仅展开年龄大于30的用户,以及2020年之后建立的好友关系对应的节点和关系。
5. 多分支并行变量展开
在单个MATCH中指定多个模式,并行展开不同路径的变量,适用于同时获取节点的多种关联关系。
MATCH (u:User {name: "Bob"})-[f:FRIENDS_WITH]->(v), (u)-[w:WORKS_WITH]->(x) RETURN v.name AS friend, x.name AS colleague;
同时展开v(Bob的好友)和x(Bob的同事)两个变量,一次性获取两种关联数据。
6. 匿名变量展开
当不需要引用某个图元素时,用_作为匿名变量,简化查询语句,避免不必要的命名。
MATCH (u:User)-[:FRIENDS_WITH]->(_) RETURN u.name, count(*) AS friend_count;
这里只需要统计用户的好友数量,不需要关注好友节点的具体信息,所以用匿名变量代替命名变量。
内容的提问来源于stack exchange,提问作者GrandMel
相关产品推荐
相关产品推荐

