WHERE 可以将别名中满足条件的数据行保留,不满足条件的数据行舍弃。
语法 1:where <condition>
语法 2:where <query>
(开发中)
参数:
- <condition>:判断条件表达式,为真的行被保留
- <query>:查询语句,有查询结果的行被保留
WHERE 子句后所接的语句须对流入 WHERE 语句的别名、或该别名的同源别名进行操作,否则该语句不会被执行。
find().nodes({shape == "square"}) as n1
find().nodes({shape == "round"}) as n2
where n1.color == n2.color
return n1, n2
上面 UQL 代码中的 n1、n2 为两个异源别名,进入 WHERE 子句之前先裁剪为三行,再按行进行进行筛选:
用条件表达式进行判断
示例:查询从银行卡 CA001 到 CA002 的 3 步转账路径,要求两张中介银行卡中至少有一张级别为 5
n({_id == "CA001"}).e().n({@card} as n1)
.e().n({@card} as n2)
.e().n({_id == "CA002"}) as p
where n1.level == 5 || n2.level == 5
return p{*}
用查询语句进行判断 (开发中)
示例:查找满足下图所示条件的中介银行卡 agent,即 CA002 经由 agent 向 CA001 转账,并且 agent 是 CA003 的 2Hop 以内的邻居:
n({_id == "CA002"}).re().n({@card} as agent).re().n({_id == "CA001"})
where n(agent).e()[*:2].n({_id == "CA003"})
return agent{*}
分析:WHERE 子句对模板查询语句输出的别名 agent 做进一步过滤,对每一个 agent 查找其到 CA003 的 2 步以内的最短路径是否存在,如果存在,则将该 agent 传给后面的 RETURN。
上面的例子可以用子图模板改写为:
graph([
n({_id == "CA002"}).re().n({@card} as agent).re().n({_id == "CA001"}),
n(agent).e()[*:2].n({_id == "CA003"})
])
return agent{*}