Azure DocumentDB
- Part 7 (DocumentDB 中的 SQL 語法 2)Microsoft Azure DocumentDB 可以讓開發人員使用熟悉的 SQL 語法來查詢 json 文件,大大降低了開發上的進入門檻
在有語法基礎後,接著來更深入地了解 DocumentDB 中的 SQL 語法中與 SQL 比較不同的地方
SELECT
是必要的,其他皆可省略 [
[
{
"firstName": "Henriette Thaulow"
}
],
[
{
"familyName": "Merriam",
},
{
"familyName": "Miller",
}
]
] ```
[ { "firstName": "Henriette Thaulow" }, { "familyName": "Merriam" }, { "familyName": "Miller" } ]
SELECT
f.id AS familyName,
c.givenName AS childGivenName,
c.firstName AS childFirstName,
p.givenName AS petName
FROM Families f
JOIN c IN f.children
JOIN p IN c.pets
for-each(Family f in Families)
{
for-each(Child c in f.children)
{
for-each(Pet p in c.pets)
{
return (Tuple(f.id AS familyName,
c.givenName AS childGivenName,
c.firstName AS childFirstName,
p.givenName AS petName));
}
}
}
Stored Procedure
或是 Trigger
udf.
UserDefinedFunction seaLevelUdf = new UserDefinedFunction()
{
Id = "SEALEVEL",
Body = @"function(city) {
switch (city) {
case 'seattle':
return 520;
case 'NY':
return 410;
case 'Chicago':
return 673;
default:
return -1;
}"
};
UserDefinedFunction createdUdf = await client.CreateUserDefinedFunctionAsync(UriFactory.CreateDocumentCollectionUri("testdb", "families"),seaLevelUdf);
SELECT f.address.city, udf.SEALEVEL(f.address.city) AS seaLevel FROM Families f
@
來標記參數字串
、數字
、布林值
、null
,陣列
或巢狀 JSON
)
{
"query": "SELECT TOP @n * FROM Families",
"parameters": [
{"name": "@n", "value": 10},
]
}
函數名稱 | 說明 |
---|
ABS (num_expr)| 取絕對值。
CEILING (num_expr)| 取大於等於指定值的最小整數。
FLOOR (num_expr)| 取小於等於指定值的最大整數。
EXP (num_expr)| 取指定值的指數。
LOG (num_expr [,base])| 取指定值的自然對數
LOG10 (num_expr)| 取指定值以 10 為底的對數。
ROUND (num_expr)| 取四捨五入值。
TRUNC (num_expr)| 無條件捨去取整數值。
SQRT (num_expr)| 取指定值的平方根。
SQUARE (num_expr)| 取指定值的平方。
POWER (num_expr, num_expr)| 取指定值的乘冪。
SIGN (num_expr)| 取指定值的正負號值 (-1、0、1)。
ACOS (num_expr)| 傳回角度,以弧度為單位,取反餘弦值。
ASIN (num_expr)| 傳回角度,以弧度為單位,取反正弦值。
ATAN (num_expr)| 傳回角度,以弧度為單位,取反正切值。
ATN2 (num_expr)| 傳回角度,以弧度為單位,正 x 軸和從原點 (y、x) 點的切線之間,其中 x 和 y 是兩個指定之浮點運算式的值。
COS (num_expr)| 在指定運算式中傳回指定角度的三角餘弦函數,以弧度為單位。
COT (num_expr)| 在指定的數值運算式中傳回指定角度的三角餘切函數,以弧度為單位。
DEGREES (num_expr)| 針對以弧度指定的角度,傳回對應的角度 (以度為單位)。
PI ()| 傳回 PI 的常數值。
RADIANS (num_expr)| 當您輸入數值運算式 (以度為單位) 時,傳回弧度。
SIN (num_expr)| 在指定運算式中傳回指定角度的三角正弦函數 (以弧度為單位)。
TAN (num_expr)| 在指定運算式中傳回輸入運算式的正切函數。
函數名稱 | 說明 |
---|
IS_ARRAY (expr)| boolean,檢查是否為陣列。
IS_BOOL (expr)| boolean,檢查是否為布林值。
IS_NULL (expr)| boolean,檢查是否為 null。
IS_NUMBER (expr)| boolean,檢查是否為數字。
IS_OBJECT (expr)| boolean,檢查是否為 JSON 物件。
IS_STRING (expr)| boolean,檢查是否為字串。
IS_DEFINED (expr)| boolean,檢查是否已經指派值。
IS_PRIMITIVE (expr)| boolean,檢查是否為字串、數字、布林值或 Null。
函數名稱 | 說明 |
---|
LENGTH (str_expr)| 取得的字元數量
CONCAT (str_expr, str_expr [, str_expr])| 字串串接。
SUBSTRING (str_expr, num_expr, num_expr)| 取字串的一部分。
STARTSWITH (str_expr, str_expr)| 傳回布林值,檢查第一個字串是否以第二個字串做為開頭
ENDSWITH (str_expr, str_expr)| 傳回布林值,檢查第一個字串是否以第二個結束字串做為含尾
CONTAINS (str_expr, str_expr)| 傳回布林值,檢查第一個字串是否包含第二個字串。
INDEX_OF (str_expr, str_expr)| 傳回第二個字串運算式第一次出現的開始位置,或者如果找不到,則為 -1。
LEFT (str_expr, num_expr)| 傳回具有指定字元位置的字串左側部分。
RIGHT (str_expr, num_expr)| 傳回具有指定字元位置的字串右側部分。
LTRIM (str_expr)| 移除字串前面開頭的空白。
RTRIM (str_expr)| 截斷字串所有結尾的空白。
LOWER (str_expr)| 轉換成小寫。
UPPER (str_expr)| 轉換成大寫。
REPLACE (str_expr, str_expr, str_expr)| 將第一字串中的第二字串取代為第三字串
REPLICATE (str_expr, num_expr)| 將字串值重複指定的次數。
REVERSE (str_expr)| 字串反轉。
函數名稱 | 說明 |
---|
ARRAY_LENGTH (arr_expr)| 傳回指定陣列運算式的元素數目。
ARRAY_CONCAT (arr_expr, arr_expr [, arr_expr])| 串連兩個或多個陣列
ARRAY_CONTAINS (arr_expr, expr)| 傳回布林值,表示陣列是否包含指定值。
ARRAY_SLICE (arr_expr, num_expr [, num_expr])| 陣列分割。
函數名稱 | 說明 |
---|
ST_DISTANCE (point_expr、point_expr)| 傳回兩個 GeoJSON 點運算式之間的距離。
ST_WITHIN (point_expr、polygon_expr)| 傳回布林運算式,指出第一個引數中指定的 GeoJSON 點是否位在第二個引數的 GeoJSON 多邊形內。
ST_ISVALID| 傳回布林值,指出指定的 GeoJSON 點或多邊形運算式是否有效。
ST_ISVALIDDETAILED| 如果指定的 GeoJSON 點或多邊形運算式是有效的,就會傳回包含布林值的 JSON 值;但如果是無效的,就會額外加上做為字串值的原因。
暫無直接支援方式,暫時做法可以參考 彙總函式