Cypher查询语言--Neo4j-WHERE(三)

时间:2022-04-13 14:27:14

目录

  1. Where
    1. Boolean 操作类型
    2. 节点属性上的过滤
    3. 正则表达式
    4. 转义正则表达式
    5. 不分大小些正则表达式
    6. 关系类型上的过滤
    7. 属性存在性
    8. 如果缺失属性默认为true
    9. 如果缺失属性默认为false
    10. 空置null过滤
    11. 关系过滤

Where

如果需要从查找的数据的图中过滤,可以在查询语句中添加where子句。

图:

Cypher查询语言--Neo4j-WHERE(三)

Boolean 操作类型

可以使用boolean操作符and 和 or 或者也可以使用not()函数。

查询:

START n=node(3, 1)

WHERE (n.age < 30 and n.name = "Tobias") ornot(n.name = "Tobias")

RETURN n

返回节点。

结果:

Cypher查询语言--Neo4j-WHERE(三)

节点属性上的过滤

查询:

START n=node(3, 1)

WHERE n.age < 30

RETURN n

结果:

Cypher查询语言--Neo4j-WHERE(三)

正则表达式

可以通过使用=~ /regexp/来匹配正在表达式。如下:

查询:

START n=node(3, 1)

WHERE n.name =~ /Tob.*/

RETURN n

返回名叫Tobias的节点。

结果:

Cypher查询语言--Neo4j-WHERE(三)

转义正则表达式

如果在正则表达式中需要有斜杠时可以通过转义实现。

查询:

START n=node(3, 1)

WHERE n.name =~ /Some\/thing/

RETURN n

没有匹配的节点返回。

结果:

Cypher查询语言--Neo4j-WHERE(三)

不分大小些正则表达式

在正则表达式前加上?i,整个正则表达式将会忽略大小写。

查询:

START n=node(3, 1)

WHERE n.name =~ /(?i)ANDR.*/

RETURN n

属性name为Andres的节点将返回

结果:

Cypher查询语言--Neo4j-WHERE(三)

关系类型上的过滤

可以match模式中通过添加具体的关系类型,但有时需要针对类型的更加高级的过滤。可以使用明确的type属性来对比,查询对关系类型名作一个正则比较。

查询:

START n=node(3)

MATCH (n)-[r]->()

WHERE type(r) =~ /K.*/

RETURN r

关系整个以K开始的类型名都将返回。

结果:

Cypher查询语言--Neo4j-WHERE(三)

属性存在性

查询:

START n=node(3, 1)

WHERE n.belt

RETURN n

结果:

Cypher查询语言--Neo4j-WHERE(三)

如果缺失属性默认为true

仅当属性存在时,比较一个图的元素的此属性,使用允许空属性的语法。

查询:

START n=node(3, 1)

WHERE n.belt? = 'white'

RETURN n

所有节点即使没有belt属性的 都将返回。此类比较返回为true。

结果:

Cypher查询语言--Neo4j-WHERE(三)

如果缺失属性默认为false

需要在缺失属性时为false,即不想返回此属性不存在的节点时。使用感叹号。

查询:

START n=node(3, 1)

WHERE n.belt! = 'white'

RETURN n

结果:

Cypher查询语言--Neo4j-WHERE(三)

空置null过滤

有时候需要测试值或者标识符是否为null。与sql类似使用 is null 或 not(is null x)也能起作用。

查询:

START a=node(1), b=node(3, 2)

MATCH a<-[r?]-b

WHERE r is null

RETURN b

Tobias节点没有链接上。

结果:

Cypher查询语言--Neo4j-WHERE(三)

关系过滤

为过滤两点间基于关系的子图,在match子句中使用限制部分。可以描述带方向的关系和可能的类型。这些都是有效的表达:WHERE a-→b WHERE a←-b WHERE a←[:KNOWS]-bWHERE a-[:KNOWS]-b

查询:

START a=node(1), b=node(3, 2)

WHERE a<--b

RETURN b

Tobias节点没有链接

结果:

Cypher查询语言--Neo4j-WHERE(三)