谓词函数¶
谓词函数只返回true或false,通常用于WHERE子句中。
Nebula Graph 支持以下谓词函数。
| 函数 | 说明 |
|---|---|
| exists() | 如果指定的属性在点、边或映射中存在,则返回true,否则返回false。 |
| any() | 如果指定的谓词适用于列表中的至少一个元素,则返回true,否则返回false。 |
| all() | 如果指定的谓词适用于列表中的每个元素,则返回true,否则返回false。 |
| none() | 如果指定的谓词不适用于列表中的任何一个元素,则返回true,否则返回false。 |
| single() | 如果指定的谓词适用于列表中的唯一一个元素,则返回true,否则返回false。 |
Note
如果列表为空,或者列表中的所有元素都为空,则返回 NULL。
Compatibility
在 openCypher 中只定义了函数exists(),其他几个函数依赖于具体实现。
语法¶
ngql
<predicate>(<variable> IN <list> WHERE <condition>)
示例¶
```ngql nebula> RETURN any(n IN [1, 2, 3, 4, 5, NULL] \ WHERE n > 2) AS r; +------+ | r | +------+ | true | +------+
nebula> RETURN single(n IN range(1, 5) \ WHERE n == 3) AS r; +------+ | r | +------+ | true | +------+
nebula> RETURN none(n IN range(1, 3) \ WHERE n == 0) AS r; +------+ | r | +------+ | true | +------+
nebula> WITH [1, 2, 3, 4, 5, NULL] AS a \ RETURN any(n IN a WHERE n > 2); +-------------------------+ | any(n IN a WHERE (n>2)) | +-------------------------+ | true | +-------------------------+
nebula> MATCH p = (n:player{name:"LeBron James"})<-[:follow]-(m) \ RETURN nodes(p)[0].name AS n1, nodes(p)[1].name AS n2, \ all(n IN nodes(p) WHERE n.name NOT STARTS WITH "D") AS b; +----------------+-------------------+-------+ | n1 | n2 | b | +----------------+-------------------+-------+ | "LeBron James" | "Danny Green" | false | | "LeBron James" | "Dejounte Murray" | false | | "LeBron James" | "Chris Paul" | true | | "LeBron James" | "Kyrie Irving" | true | | "LeBron James" | "Carmelo Anthony" | true | | "LeBron James" | "Dwyane Wade" | false | +----------------+-------------------+-------+
nebula> MATCH p = (n:player{name:"LeBron James"})-[:follow]->(m) \ RETURN single(n IN nodes(p) WHERE n.age > 40) AS b; +------+ | b | +------+ | true | +------+
nebula> MATCH (n:player) \ RETURN exists(n.player.id), n IS NOT NULL; +--------------+---------------+ | exists(n.id) | n IS NOT NULL | +--------------+---------------+ | false | true | ...
nebula> MATCH (n:player) \ WHERE exists(n['name']) \ RETURN n; +---------------------------------------------------------------+ | n | +---------------------------------------------------------------+ | ("player105" :player{age: 31, name: "Danny Green"}) | | ("player109" :player{age: 34, name: "Tiago Splitter"}) | | ("player111" :player{age: 38, name: "David West"}) | ... ```