本章介绍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 ---+----------+--------- | Vehicle | #11:2 | Vehicle | #13:1 | Vehicle | #13:4 ---+----------+---------
执行以下查询以从顶点#11:3
获取传入和传出顶点。
orientdb {db = demo}>SELECT both() FROM #11:3
如果上述查询成功执行,您将得到以下输出。
---+----------+--------+------- # | @class | out | in ---+----------+--------+------- | 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 ---+----------+--------- | null | 150000 ---+----------+---------
执行以下查询以获得所有员工的平均薪水。
orientdb {db = demo}>SELECT avg(salary) FROM Employee
如果上述查询成功执行,您将得到以下输出。
---+----------+--------- # | @CLASS | avg ---+----------+--------- | 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 ---+----------+--------+-------------------------- | 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 ----+--------+----------------------- |null |My name is satish |null |My name is not satish |null |My name is not satish |null |My name is not satish |null |My name is not satish ----+--------+------------------------
执行以下查询以获取系统日期。
orientdb {db = demo}> SELECT SYSDATE() FROM Employee
如果上述查询成功执行,您将得到以下输出。
----+--------+----------------------- # |@CLASS | SYSDATE ----+--------+----------------------- |null |2016-02-10 12:05:06 |null |2016-02-10 12:05:06 |null |2016-02-10 12:05:06 |null |2016-02-10 12:05:06 |null |2016-02-10 12:05:06 ----+--------+------------------------
通过彻底使用此函数,可以轻松操纵OrientDB数据。