arangoDB之AQL語句常用操作


官網

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 [

  { name: "John Doe", gender: "m" },
  { name: "Jane Smith", gender: "f" }
]
  INSERT user INTO users

 

生成測試文檔(即多行)

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。 UPDATEREPLACE並且UPSERT可以指。

通常跟在retrun后面。 比如我們更新了某些文檔,那么可以使用return NEW查看有更新的文檔,並顯示文檔的全部內容

如果沒有return 等參數的話,update等關鍵字是沒有返回具體值的.在同一個查詢語句中,可以同時返回NEW 和OLD;也可以只返回NEW或OLD的某個屬性。Eg: NEW. TypeCode

 

 

 

 

Filter

過濾數據

如果使用多個FILTER語句,它們的結果將與邏輯 AND 組合,這意味着所有過濾條件必須為真才能包含一個元素。

 

 

 

Limit

限制返回的條數,可選地跳過元素(分頁)

 

 

如果limit后面是兩個參數,那么第一個個參數表示從第幾條開始,第二個參數表示取幾條,類似分頁的效果

 

 

 

 

LET

LET 關鍵字是為變量分配任意值,變量名在同一查詢應該保持唯一。

主要用於聲明復雜的計算並避免在查詢的多個部分重復計算相同的值。

變量名稱中允許的字符是字母ato z(小寫和大寫)、數字0to 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

 

 

 

?代表否則。

 

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM