OrientDB - 函数
本章介绍了 OrientDB 中不同类型函数的完整参考。下表定义了按功能分类的函数列表。
图形函数
Sr.No. | 函数名称 &描述 |
---|---|
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(): 从当前记录开始获取传入的顶点作为 Edge。 语法 − inV() |
9 | traversedElement(): 返回 Traverse 命令中遍历的元素。 语法 − traversedElement(<index> [,<items>]) |
10 | traversedVertex(): 返回 Traverse 命令中遍历的顶点。 语法 − traversedVertex(<index> [,<items>]) |
11 | traversedEdge(): 返回 Traverse 命令中遍历的边。 语法 − traversedEdge(<index> [,<items>]) |
12 | shortestPath(): 返回两个顶点之间的最短路径。 Direction 可以是 OUT(默认)、IN 或 BOTH。 Synatx − shortestPath( <sourceVertex>, <destinationVertex> [, <direction> [, <edgeClassName>]]) |
13 | dijkstra(): 使用 Dijkstra 算法返回两个顶点之间的最近路径。 Syntax − 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 ---+----------+-------+-------
数学函数
Sr.No. | 函数名称和说明 |
---|---|
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。 语法 − abs(<field>) |
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() 返回中间方差:与均值的平方差的平均值。
Syntax − 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 ---+----------+---------
集合函数
Sr.No. | 函数名称和说明 |
---|---|
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(): 此函数有两个含义−
语法 − expand(<field>) |
9 | unionall(): 用作聚合或内联。如果仅传递一个参数,则聚合,否则执行并返回作为参数接收的所有集合的 UNION。也可以在没有集合值的情况下工作。 语法 − unionall(<field> [,<field-n>]*) |
10 | flatten(): 提取字段中的集合并将其用作结果。它已被弃用,请改用 expand()。 语法 − flatten(<field>) |
11 | last(): 仅检索多值字段(数组、集合和映射)的最后一项。对于非多值类型,仅返回值。 语法 − last(<field>) |
12 | symmetricDifference(): 用作聚合或内联。如果仅传递一个参数,则聚合,否则执行并返回作为参数接收的集合之间的对称差异。 语法 − 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 ---+----------+-------+---------------------------
杂项函数
Sr.No. | 函数名称和说明 |
---|---|
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)。如果字段/值不为空,则返回 return_value_if_null。 语法 − ifnull(<field|value>, <return_value_if_null> [,<return_value_if_not_null>](,<field&.md#124;value>]*) |
6 | coalesce(): 返回第一个非空字段/值参数。如果没有非空字段/值,则返回空值。 语法 − coalesce(<field|value> [, <field-n|value-n>]*) |
7 | uuid(): 使用 Leach-Salz 变体生成 128 位值的 UUID。 语法 − uuid() |
8 | if(): 评估条件(第一个参数),如果条件为真,则返回第二个参数,否则返回第三个参数。 语法 − if(<expression>, <result-if-true>, <result-if-false>) |
使用以下查询尝试一些 Misc 函数。
执行以下查询以了解如何执行 if 表达式。
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数据。