本章介紹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資料。