OrientDB函數

本章介紹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數據。