当前位置: 代码迷 >> 综合 >> neo4j--Cypher函数 (方法)---断言(all、any、none、single、exists)标量(size、length、type、id、coalesce、head、last.....)
  详细解决方案

neo4j--Cypher函数 (方法)---断言(all、any、none、single、exists)标量(size、length、type、id、coalesce、head、last.....)

热度:74   发布时间:2023-11-17 22:13:46.0

Cypher函数 (方法)

分类:

  1. 断言函数
  2. 标量函数
  3. 列表函数
  4. 数学函数
  5. 字符串函数

实验实例:

CREATE 
(Alice { name: 'Alice' ,age:38,eyes:'brown'}),
(Charlie { name: 'Charlie' ,age:53,eyes:'green'}),
(Bob { name: 'Bob' ,age:25,eyes:'blue'}),
(Daniel { name: 'Daniel' ,age:54,eyes:'brown'}),
(Eskil { array:['one','two','three'],name: 'Eskil' ,age:41,eyes:'blue'})CREATE 
(Alice)-[:KNOWS]->(Charlie),
(Alice)-[:KNOWS]->(Bob),
(Charlie)-[:KNOWS]->(Daniel),
(Bob)-[:KNOWS]->(Daniel),
(Bob)-[:MARRIED]->(Eskil)return Alice,Charlie,Bob,Daniel,Eskil

1、断言(Predicate)函数

       断言函数是对给定的输入返回true或者false的布尔函数。它们主要用于查询的WHERE部分过滤子图。

 1.1 all()

     判断是否一个断言适用于列表中的所有元素。

            语法: all(variable IN list WHERE predicate)

           参数:

  •   list:返回列表的表达式
  •   variable:用于断言中的变量
  •   predicate:用于测试列表中所有元素的断言

MATCH p =(a)-[*1..3]->(b)

WHERE ALL (x IN nodes(p) WHERE x.age > 30)

RETURN p

1.2 any() 

      判断是否一个断言至少适用于列表中的一个元素。

    语法: any(variable IN list WHERE predicate)

    参数:

  •    list:返回列表的表达式
  •   variable:用于断言中的变量
  •   predicate:用于测试列表中所有元素的断言

MATCH (a)

RETURN ANY (x IN a.array WHERE x = 'one')

RETURN a

     返回路径中的所有节点的array数组属性中至少有一个值为'one'。

1.3 none()

   如果断言不适用于列表中的任何元素,则返回true

语法: none(variable IN list WHERE predicate)

参数:

  •    list:返回列表的表达式
  •   variable:用于断言中的变量
  •   predicate:用于测试列表中所有元素的断言

MATCH p =(n)-[*1..3]->(b)

WHERE n.name = 'Alice' AND NONE (x IN nodes(p) WHERE x.age = 25)

RETURN p

   返回的路径中没有节点的age属性值为25。

1.4 single()

如果断言刚好只适用于列表中的某一个元素,则返回true。

语法: single(variable IN list WHERE predicate)

参数:

  1. list:返回列表的表达式
  2. variable:用于断言中的变量
  3. predicate:用于测试列表中所有元素的断言

MATCH p =(n)-->(b)

WHERE n.name = 'Alice' AND SINGLE (var IN nodes(p) WHERE var.eyes = 'blue')

RETURN p

      每条返回的路径中刚好只有一个节点的eyes属性值为'blue'。

1.5 exists()

如果数据库中存在该模式或者节点中存在该属性时,则返回true。

语法: exists( pattern-or-property )

参数: pattern-or-property:模式或者属性(以’variable.prop’的形式)

MATCH (n)

WHERE exists(n.name)

RETURN n.name AS name, exists((n)-[:MARRIED]->()) AS is_married

 返回了所有节点的name属性和一个指示是否已婚的true/false值。

2、标量(Scalar)函数

标量函数返回一个单值。

  2.1 size()

   使用size()返回表中元素的个数。

语法: size( list )

参数: list:返回列表的表达式

RETURN size(['Alice', 'Bob']) AS col

本查询返回了列表中元素的个数。

2.2 模式表达式的size

这里的size()的参数不是一个列表,而是一个模式表达式匹配到的查询结果集。计算的是结果集元素的个数,而不是表达式本身的长度。

语法: size( pattern expression )

参数: pattern expression:返回列表的模式表达式

MATCH (a)

WHERE a.name = 'Alice'

RETURN size((a)-->()-->()) AS fof

本查询返回了模式表达式匹配到的子图的个数

2.3 length()

使用length()函数返回路径的长度。

语法: length( path )

参数: path:返回路径的表达式

MATCH p =(a)-->(b)-->(c)

WHERE a.name = 'Alice'

RETURN length(p)

字符串的长度

语法: length( string )

参数: string:返回字符串的表达式

RETURN length('qwer')

 

MATCH (a)

WHERE length(a.name)> 6

RETURN length(a.name)

查询返回了name为’Charlie’的长度。

2.5 type()

返回字符串代表的关系类型。

语法: type( relationship )

参数: relationship:一个关系

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

WHERE n.name = 'Alice'

RETURN type(r)

 

查询返回了关系r的关系类型。

2.6 id()

返回关系或者节点的id。

语法: id( property-container )

参数: property-container:一个节点或者关系

MATCH (a)

RETURN id(a)

返回了5个节点的id。

2.7 coalesce()

返回表达式列表中的第一个非空的值。如果所有的实参都为空 ,则返回null。

语法: coalesce( expression [, expression]* )

参数: expression:表达式,可能返回null。

MATCH (a)

WHERE a.name = 'Alice'

RETURN coalesce(a.hairColor, a.eyes)

2.8 head()

head()返回列表中的第一个元素。

语法: head( expression )

参数: expression:返回列表的表达式

MATCH (a)

WHERE a.name = 'Eskil'

RETURN a.array, head(a.array)

 

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

WHERE n.name = 'Alice'

return head(nodes(p))

 

返回了路径中的第一个节点。

2.9 last()

last()返回列表中的最后一个元素。

语法: last( expression )

参数: expression:返回列表的表达式

MATCH (a)

WHERE a.name = 'Eskil'

RETURN a.array, last(a.array)

返回了路径中的最后一个节点。

2.10 timestamp()

timestamp()返回当前时间与1970年1月1日午夜之间的差值,单位以毫秒计算。它在整个查询中始终返回同一个值,即使是在一个运行时间很长的查询中。

语法: timestamp()

RETURN timestamp()

以毫秒返回当前时间。

 

2.11 startNode()

startNode()返回一个关系的开始节点。

语法: startNode( relationship )

参数: relationship:返回关系的表达式

MATCH ()-[r]-()

WHERE id(r)=0

RETURN startNode(r)

2.12 endNode()

endNode()返回一个关系的结束节点。

语法: endNode( relationship )

参数: relationship:返回关系的表达式

MATCH ()-[r]-()

WHERE id(r)=0

RETURN startNode(r),endNode(r)

2.13 properties()

properties()将实参转为属性值的map。如果实参是一个节点或者关系,返回的就是节点或关系的属性的map。如果实参已经是一个map了,那么原样返回结果。

语法: properties( expression )

参数: expression:返回节点,关系或者map的表达式

match (n)

where id(n) =0

RETURN properties(n)

2.14 toInt()

toInt()将实参转换为一个整数。字符串会被解析为一个整数。如果解析失败,将返回null。浮点数将被强制转换为整数。

语法: toInt( expression )

参数: expression:返回任意值的表达式

RETURN toInt('42'), toInt('not a number')

2.15 toFloat

toFloat()将实参转换为浮点数。字符串会被解析为一个浮点数。如果解析失败,将返回null。整数将被强制转换为浮点数。

语法: toFloat( expression )

参数: expression:返回任意值的表达式

RETURN toFloat('11.5'), toFloat('not a number')

 

 

 

 

  相关解决方案