本章介绍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 (默认),IN 或BOTH 。 |
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() | 返回绝对值。 它适用于Integer ,Long ,Short ,Double ,Float ,BigInteger ,BigDecimal ,null 。 |
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数据。