OrientDB函数

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

图函数

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

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

数学函数

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

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

集合函数

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

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

杂项函数

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

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

        原文作者:OrientDB教程
        原文地址: https://www.yiibai.com/orientdb/orientdb_functions.html
        本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
    点赞