主要學習內容:
- 安裝並運行本地ArangoDB服務器
- 使用Web界面與之交互
- 存儲數據庫中的示例數據
- 查詢數據庫以再次檢索數據
- 編輯和刪除現有數據
1、安裝
下載地址
https://www.arangodb.com/download/
安裝過程中將提示輸入root的密碼,記住root密碼已被登陸使用。
安裝客戶端
如果客戶端顯示未將默認執行命令添加到環境變量中,可以人工添加
C:\Users\name\AppData\Local\ArangoDB3-client 3.3.15\usr\bin
這樣就可以使用arangoimp,導入數據,arangoexport導出數據等,foxx等功能了
2、web界面
默認情況下,啟用身份驗證。默認用戶是 root
。根據所使用的安裝方法,提示輸入root密碼或默認root密碼的安裝過程為空(參見上文)。
接下來,將詢問您使用哪個數據庫。每個服務器實例都附帶一個_system
數據庫。選擇此數據庫以繼續。
然后,您應該在儀表板上顯示如下服務器統計信息:
有關該接口的更詳細說明,請參閱Web Interface。
3、數據庫、集合和文檔
(1)創建
數據庫是一組集合,集合存儲了記錄,記錄就是所謂的文檔。因此collections可以被視為關系型數據庫中的表,documents可以被視為表中的每一行數據。不同的是我們不需要定義字段,因為每一個document當中包含的是鍵值對,統一個collections中的所有documents的鍵值結構大多數是相同的,但數據庫並不硬性要求documents必須結構一致。
現在我們可以使用默認_system
數據庫並使用Web界面來創建集合collections和文檔documents
首先創建一個collections:名字可以叫users
點擊+增加文檔,__key__選擇默認自增,不進行設置。這里的key是惟一的而且一旦設定將無法更改。
_key
總是字符串格式,如自動生成的key為3553,然后_id為users/3553
現在該文檔中還沒有任何內容,我們可以點擊Append來添加內容,會出現Field和Value兩個空白可以填列。我們可以輸入name:你的名字,age:你的年齡,然后點擊保存。這樣就保存到了數據庫中。
再次點擊collection,點擊users就可以看到剛剛創建的一個document了。
(2)查詢
點擊Queries
輸入查詢語句:
RETURN DOCUMENT("users/3553")
將會顯示剛剛創建的內容
[
{
"_key": "3553",
"_id": "users/3553",
"_rev": "_XbVPcM6--_",
"name": "your name",
"age": 25
}
]
DOCUMENT()語句是用來查找一個文檔或一組文檔,當你指導key或者id的時候。查詢的結果是一個數組。
這種查詢被稱為數據訪問查詢,沒有修改;還有一種是數據修改查詢。
INSERT { name: "Katie Foster", age: 27 } INTO users
那么我們可以看到我們想users collections當中新增了一個document.我們可以看到返回的是一個空數組。因為我們沒有定義RETURN.
如果我們希望返回剛剛創建的document,我們可以使用RETURN NEW來顯示
INSERT { name: "James Hendrix", age: 69 } INTO users RETURN NEW
如何查詢剛剛創建的三個用戶呢?
我們可以使用DOCUMENT([ ])包含一個數組的形式來查詢。示例:
RETURN DOCUMENT(["users/5595","users/3553","users/5138"])
查詢結果:
[ [ { "_key": "5595", "_id": "users/5595", "_rev": "_XbVgg3e--_", "name": "James Hendrix", "age": 69 }, { "_key": "3553", "_id": "users/3553", "_rev": "_XbVPcM6--_", "name": "name1", "age": 25 }, { "_key": "5138", "_id": "users/5138", "_rev": "_XbVd-ei--_", "name": "name2", "age": "22" } ] ]
但是如果用戶很多的情況下,使用這種形式就不好了。
我們可以使用FOR語句來循環遍歷返回結果
FOR user IN users RETURN user
你可以看到返回的結果與插入的循序並不一致,因為返回的結果是沒有順序的,如果希望排序,可以加上SORT
FOR user IN users SORT user._key RETURN user
注意因為_key是字符串,因此排序總是1在前面,這樣可能不是我們想要的,我們也可以根據age進行排序
FOR user IN users SORT user.age DESC RETURN user
DESC代表降序。
如果我們希望篩選年齡在30歲以上的人,我們可以使用FILTER
FOR user IN users FILTER user.age > 30 SORT user.age RETURN user
修改數據可以使用UPDATE
UPDATE "5138" WITH {age:33} IN users RETURN NEW
UPDATE 后面跟key,WITH后跟修改的內容,IN 跟着collections
如果使用REPLACE的話,那么5138用戶將只有id,key和age屬性,name屬性將消失。
再次查詢,我們得到的用戶名將增加一位。
FOR user IN users FILTER user.age > 30 SORT user.age RETURN user.name
如果我們要更改輸出的格式,可以在RETURN中使用鍵值對的方式來指定
FOR user IN users RETURN { userName: user.name, age: user.age }
這樣返回的結果就是userName,而不是默認的name了。
[ { "userName": "James Hendrix", "age": 69 }, { "userName": "John Smith", "age": 32 }, { "userName": "Katie Foster", "age": 40 } ]
除了該表結構,我們換可以改變值,如
FOR user IN users RETURN CONCAT(user.name, "'s age is ", user.age)
這里的CONCAT是用來連接字符串的,這樣我們得到的結果是:
[ "James Hendrix's age is 69", "John Smith's age is 32", "Katie Foster's age is 40" ]
小的實驗,
返回所有的用戶配對,除了自己和自己配對
FOR user1 IN users FOR user2 IN users FILTER user1!=user2 RETURN [user1.name,user2.name]
我們還可以計算兩個人的年齡和
FOR user1 IN users FOR user2 IN users FILTER user1!=user2 RETURN {pairs:[user1.name,user2.name], sumofages:user1.age+user2.age}
如果我們僅想要兩個年齡和小於80的人,我們可以使用LET 來定義一個臨時變量
FOR user1 IN users FOR user2 IN users FILTER user1!=user2 LET sumofages = user1.age+user2.age FILTER sumofages<80 RETURN {pairs:[user1.name,user2.name], sumofages}
注意這里的sumofages由於鍵值名稱都為sumofages,可以簡寫。與js相同。
刪除用戶,使用REMOVE
REMOVE "9883" IN users
當然我們也可以采用循環刪除的方式,刪除年齡大於30的用戶。
FOR user IN users FILTER user.age >= 30 REMOVE user IN users