当前位置: 首页 > 教程 > OrientDB >

OrientDB函数

精华
小牛编辑
136浏览
2023-03-14

本章介绍OrientDB中不同类型函数的完整参考。 下表定义了按功能分类的函数列表。

图函数

用于操纵图形数据的函数。

编号 函数名称 说明
1 Out() 获取从当前记录开始的相邻传出顶点作为顶点。语法:out([<label-1>][,<label-n>]*)
2 In() 获取从当前记录开始的相邻传入顶点作为顶点。语法:in([<label-1>][,<label-n>]*)
3 Both() 获取从当前记录开始的相邻传出和传入顶点作为顶点。语法:both([<label1>][,<label-n>]*)
4 outE() 获取从当前记录开始的相邻传出边作为顶点。语法:outE([<label1>][,<label-n>]*)
5 inE() 获取从当前记录开始的邻近传入边作为顶点。语法:inE([<label1>][,<label-n>]*)
6 bothE() 获取从当前记录开始的相邻传出和传入边作为顶点。语法:bothE([<label1>][,<label-n>]*)
7 outV() 获取从当前记录开始的传出顶点作为Edge。语法:outV()
8 inV() 从当前记录中获取进入的顶点作为边。语法:inV()
9 traversedElement() 返回遍历命令中的遍历元素。语法:traversedElement(<index> [,<items>])
10 traversedVertex() 在遍历命令中返回遍历的顶点。语法:traversedVertex(<index> [,<items>])
11 traversedEdge() 返回遍历命令中的遍历边。语法:traversedEdge(<index> [,<items>])
12 shortestPath() 返回两个顶点之间的最短路径。 方向可以是OUT(默认),INBOTH
13 dijkstra() 使用Dijkstra算法返回两个顶点之间最便宜的路径。语法:dijkstra(<sourceVertex>, <destinationVertex>, <weightEdgeFieldName> [, <direction>])

尝试一些图函数以及以下查询。

执行以下查询以获取所有车辆顶点的所有传出顶点。

orientdb {db = demo}>SELECT out() from Vehicle

如果上述查询成功执行,您将得到以下输出。

---+----------+--------- 
 # | @class   | out 
---+----------+--------- 
 0 | Vehicle  | #11:2 
 1 | Vehicle  | #13:1 
 2 | Vehicle  | #13:4 
---+----------+---------

执行以下查询以从顶点#11:3获取传入和传出顶点。

orientdb {db = demo}>SELECT both() FROM #11:3

如果上述查询成功执行,您将得到以下输出。

---+----------+--------+------- 
 # | @class   | out    | in  
---+----------+--------+------- 
 0 | Vehicle  | #13:2  | #10:2   
 ---+----------+-------+-------
`

数学函数

下表定义了用于执行数学表达式的数学函数的列表。

编号 函数 描述
1 eval() 计算引号(或双引号)之间的表达式。语法:eval('<expression>')
2 min() 返回最小值。 如果用多个参数调用,则它返回所有参数之间的最小参数值。语法:min(<field> [, <field-n>]* )
3 max() 返回最大值。 如果调用多个参数,则返回所有参数之间的最大值。语法:max(<field> [, <field-n>]* )
4 sum() 返回所有返回值的总和。语法:sum(<field>)
5 abs() 返回绝对值。 它适用于IntegerLongShortDoubleFloatBigIntegerBigDecimalnull
6 avg() 返回平均值。语法:avg(<field>)
7 count() 计算与查询条件相匹配的记录。 如果*未用作字段,则只有在内容不为空时,记录才会被计数。语法:count(<field>)
8 mode() 返回频率最高的值,计算中忽略空值。语法:mode(<field>)
9 median() 返回中间值或插值后的值,该值表示对值进行排序后的中间值。 计算中忽略空值。语法:median(<field>)
10 percentile() 返回第n个百分点。 计算中忽略空值。语法:percentile(<field> [, <quantile-n>]*)
11 variance() 返回中间方差:平均值与平均值的平方差。语法:variance(<field>)
12 stddev() 返回标准偏差:衡量值是如何分布的。 计算中忽略空值。语法:stddev(<field>)

使用以下查询尝试一些数学函数。
执行以下查询以获得所有员工的工资总和。

orientdb {db = demo}>SELECT SUM(salary) FROM Employee

如果上述查询成功执行,您将得到以下输出。

---+----------+--------- 
 # | @CLASS   | sum 
---+----------+--------- 
 0 | null     | 150000 
---+----------+---------

执行以下查询以获得所有员工的平均薪水。

orientdb {db = demo}>SELECT avg(salary) FROM Employee

如果上述查询成功执行,您将得到以下输出。

---+----------+--------- 
 # | @CLASS   | avg 
---+----------+--------- 
 0 | null     | 25 
---+----------+---------

集合函数

下表定义了操作集合数据的函数列表。

编号 函数 描述
1 set() 为一个集合添加一个值。 如果该值是一个集合,那么它将与该集合合并,否则会添加<value>。语法:set(<field>)
2 map() 首次创建映射时向映射添加值。 如果<value>是一个映射,则它将与该映射合并,否则会将<key><value>对添加到映射为新条目。语法:map(<key>, <value>)
3 ist() 添加一个值以列出第一次创建列表。 如果<value>是一个集合,那么它将与该列表合并,否则将<value>添加到列表中。语法:list(<field>)
4 difference() 作为汇总或内联工作。 如果只传递一个参数,则聚合,否则执行,并返回作为参数接收的集合之间的差异。语法:difference(<field> [,<field-n>]*)
5 first() 仅检索多值字段的第一项(数组,集合和映射)。 对于非多值类型,只返回值。语法:first(<field>)
6 intersect() 作为汇总或内联工作。 如果只传递一个参数,则聚合,否则执行并返回作为参数接收的集合的交互。语法:intersect(<field> [,<field-n>]*)
7 distinct() 根据您指定为参数的字段仅检索唯一数据条目。 与标准SQL DISTINCT相比,主要区别在于使用OrientDB时,可以指定带括号且只有一个字段的函数。语法:distinct(<field>)
8 expand() 这个函数有两个含义 - 1.在集合字段上使用时,它将展开字段中的集合并将其作为结果使用。2. 在链接(RID)字段上使用时,它会扩展该链接指向的文档。语法:expand(<field>)
9 unionall() 作为汇总或内联工作。 如果只传递一个参数,则聚合,否则执行并返回作为参数接收的所有集合的UNION。 也适用于没有收集值。语法:unionall(<field> [,<field-n>]*)
10 flatten() 在字段中提取集合并将其用作结果。 已弃用,请使用expand()
11 last() 仅检索多值字段的最后一项(数组,集合和映射)。 对于非多值类型,只返回值。语法:last(<field>)
12 symmetricDifference()
13 作为汇总或内联工作。 如果只传递一个参数,则聚集,否则执行并返回作为参数接收的集合之间的对称差分。语法:symmetricDifference(<field> [,<field-n>]*)

以下查询尝试一些集合函数的使用。

执行以下查询以获得一组教师,教第9班。

orientdb {db = demo}>SELECT ID, set(teacher.id) AS teacherID from classess where class_id = 9

如果上述查询成功执行,您将得到以下输出。

---+----------+--------+-------------------------- 
 # | @CLASS   | id     | TeacherID 
---+----------+--------+-------------------------- 
 0 | null     | 9     |   1201, 1202, 1205, 1208 
---+----------+-------+---------------------------

杂项函数

下表定义了执行杂项操作的函数列表。

编号 函数 描述
1 date() 返回格式化字符串的日期。 <date-as-string>是字符串格式的日期,<format>是遵循这些规则的日期格式。语法:date( <date-as-string> [<format>] [,<timezone>] )
2 sysdate() 返回当前的日期和时间。语法:sysdate( [<format>] [,<timezone>] )
3 format() 使用String.format()约定格式化一个值。语法:format( <format> [,<arg1> ](,<arg-n>]*.md)
4 distance() 使用Haversine算法返回全球两点之间的距离。 坐标必须是度数。语法:distance( <x-field>, <y-field>, <x-value>, <y-value> )
5 ifnull() 返回传递的字段/值(或可选参数return_value_if_not_null)。 如果field/value不为null,则返回return_value_if_null。语法:`ifnull(<field value>, , `
6 coalesce() 返回第一个字段/值非空参数。 如果没有字段/值不为空,则返回null。语法:`coalesce(<field value> [, <field-n value-n>]*)`
7 uuid() 使用Leach-Salz变体生成一个128位的UUID值。语法:uuid()
8 if() 评估条件(第一个参数),如果条件为真,则返回第二个参数,否则返回第三个参数。语法:if(<expression>, <result-if-true>, <result-if-false>)

使用以下查询尝试一些其它函数。
执行以下查询以了解如何执行表达式。

orientdb {db = demo}> SELECT if(eval("name = 'satish'"), "My name is satish", 
"My name is not satish") FROM Employee

如果上述查询成功执行,您将得到以下输出。

----+--------+----------------------- 
#   |@CLASS  | IF 
----+--------+----------------------- 
0   |null    |My name is satish  
1   |null    |My name is not satish 
2   |null    |My name is not satish  
3   |null    |My name is not satish  
4   |null    |My name is not satish  
----+--------+------------------------

执行以下查询以获取系统日期。

orientdb {db = demo}> SELECT SYSDATE() FROM Employee

如果上述查询成功执行,您将得到以下输出。

----+--------+----------------------- 
#   |@CLASS  | SYSDATE 
----+--------+----------------------- 
0   |null    |2016-02-10 12:05:06 
1   |null    |2016-02-10 12:05:06 
2   |null    |2016-02-10 12:05:06 
3   |null    |2016-02-10 12:05:06 
4   |null    |2016-02-10 12:05:06 
----+--------+------------------------

通过彻底使用此函数,可以轻松操纵OrientDB数据。