官網
https://www.arangodb.com/community-server/sql-aql-comparison/
基礎知識
- 單行注釋:雙斜杠開頭
- 多行注釋:以正斜杠和星號開頭,以星號和后面的正斜杠結尾
- AQL只允許一個單一查詢字符串查詢; 因此,不允許使用分號來表示一個查詢的結束和分隔多個查詢
- 關鍵字不區分大小寫,如果名稱使用了關鍵字的名稱,則名稱必須包含在反引號或正引號中
- 集合不能用"" ''
包裹
- 可以通過點或者[]獲取對象的屬性,但是方括號內可以嵌套表達式
- 使用 AQL 從數據庫中檢索數據始終包括RETURN 操作
增刪改查
插入新的文檔(即單行)
insert {name: “andy”, dender: “m”,} into users
插入查詢的文檔(在users這個集合中查找到active==1的user,並插入到backup這個集合中)
for user in users
filter user.active ==1
insert user into backup
插入多行
FOR user IN [
生成測試文檔(即多行)
for I in 1..1000
insert{
name:concat(“test”, i),
gender:( i%2==0 ? “f”: “m”)
}
Into users
刪
REMOVE { _key: '00000000092a06ca' } IN ci
更新部分屬性使用update:
當key=1時,更新name為andy
update {_key:’1’}
with {name : ‘andy’}
in users
如果要批量更新符合條件的數據數據時,可以用for遍歷所有的文檔,並且用filter 關鍵字過濾出要更新的文檔
for i in ci
filter i.typeCode=='ruijieFan'
update i with {manageStatus : 2} in ci
return NEW
全部替換某個文檔 replace
FOR i IN 1..1000
REPLACE CONCAT('test', i) WITH { foobar: true } IN users
FOR u IN users
FILTER u.active == false
REPLACE u WITH { status: 'inactive', name: u.name } IN backup
查
使用查詢方法時,必須要使用return返回數據
for i in ci
filter i.typeCode=='ruijieFan'
return i
遍歷ci集合中的所有文檔,返回文檔屬性typecode=='ruijieFan'的文檔
根據上一個aql語句的結果進行二次查詢,可以使用let關鍵字設置一個變量為第一個aql語句的結果
let data = (for i in cmdb_ci
filter i.attributes.ipv4_address=='172.17.164.240'
return i._key)
for j in cmdb_ci
filter j.parentId == data[0] and j.typeCode=='process'
return j
先找到IP地址為240對應的key,並賦值為data變量,第二個for循環的filter中使用data進行判斷
關鍵字
https://www.arangodb.com/docs/stable/aql/operations.html
NEW,OLD
NEW
指插入或修改的文檔修訂,OLD
指更新或刪除前的文檔修訂。INSERT
語句只能引用NEW
偽值,REMOVE
操作只能引用OLD
。 UPDATE
,REPLACE
並且UPSERT
可以指。
通常跟在retrun后面。 比如我們更新了某些文檔,那么可以使用return NEW查看有更新的文檔,並顯示文檔的全部內容
如果沒有return 等參數的話,update等關鍵字是沒有返回具體值的.在同一個查詢語句中,可以同時返回NEW 和OLD;也可以只返回NEW或OLD的某個屬性。Eg: NEW. TypeCode
Filter
過濾數據
如果使用多個FILTER
語句,它們的結果將與邏輯 AND 組合,這意味着所有過濾條件必須為真才能包含一個元素。
Limit
限制返回的條數,可選地跳過元素(分頁)
如果limit后面是兩個參數,那么第一個個參數表示從第幾條開始,第二個參數表示取幾條,類似分頁的效果
LET
LET 關鍵字是為變量分配任意值,變量名在同一查詢應該保持唯一。
主要用於聲明復雜的計算並避免在查詢的多個部分重復計算相同的值。
變量名稱中允許的字符是字母a
to z
(小寫和大寫)、數字0
to 9
、下划線 ( _
) 符號和美元 ( $
) 符號。變量名不能以數字或下划線開頭。美元符號只能用作變量名的第一個字符,並且后面必須跟一個字母。
Sort
排序,默認升序排序,可根據關鍵字asc,desc自定義排序規則,也可以使用一個或多個屬性,升序或降序
按 lastName(升序)、firstName(升序)和 id(降序)排序的示例查詢:
FOR u IN users
SORT u.lastName, u.firstName, u.id DESC
RETURN u
FOR:遍歷集合或視圖、數組的所有元素或遍歷圖形
RETURN:產生查詢的結果。
RETURN
語句的結果始終是一個數組
Return后面還可以接着一個DISTINCT關鍵字,確保返回值的唯一性。Distinct語句僅對挨着的return語句生效
SEARCH:查詢 ArangoSearch 視圖的(全文)索引
COLLECT:按一個或多個組標准對數組進行分組。也可以計數和聚合。
REMOVE:從集合中刪除文檔。
REMOVE { _key: '00000000092a06ca' } IN ci
UPDATE:部分更新集合中的文檔。
UPDATE document IN collection options
UPDATE keyExpression WITH document IN collection options
使用第一種語法時。Document里必須包含_key屬性,否則不知道更新的是哪個文檔
REPLACE:完全替換集合中的文檔。
REPLACE document IN collection options
REPLACE keyExpression WITH document IN collection options
INSERT:將新文檔插入到集合中。
UPSERT:更新/替換現有文檔,或者在它不存在的情況下創建它。
WITH:指定查詢中使用的集合(僅在查詢開始時)
運算符
https://www.arangodb.com/docs/stable/aql/operators.html
FOR doc IN viewName
SEARCH ANALYZER(doc.text == "quick" OR doc.text == "brown", "text_en")
// -- or --
SEARCH ANALYZER(doc.text IN ["quick", "brown"], "text_en")
RETURN doc
?代表否則。