Node.js 操作 mongoDB常用的是mongoose,那麼Node.js 操作 ArangoDB的是 ❓ orango ❓ arangojs ❓關於orango在上一節已經講過,所以本節來講述Node.js 利用 arangojs
操作 ArangoDB( CRUD
)。 👇👇👇
Arangojs
ArangoJS —— The official ArangoDB low-level JavaScript client。
Preparations
-
express搭建服務
-
使用的數據庫:
_system
-
使用的集合 :
users
-
安裝arangojs :
npm install arangojs --save
-
服務與路由分開進行
- 目錄結構
- 🥑 services
- 新建文件
user.js
(services文件夾–>user.js文件) - 代碼
let arangojs = require('arangojs'); let db = new arangojs.Database('http://127.0.0.1:8529'); db.useDatabase("_system"); db.useBasicAuth("root", ""); let collection = db.collection('users'); module.exports = { // 獲取數據 // 增加數據 //修改數據 //刪除數據 }
- 新建文件
- 🍐routes
-
新建文件
user.js
(routes文件夾–>user.js文件) -
代碼
let express = require('express'); let router = express.Router(); let service = require("../services/users"); router.get('/getUser', (req, res) => { 。。。。。。 //獲取數據的相關操作 }); router.post('/addUser', (req, res) => { 。。。。。。 //增加數據的相關操作 });
-
- 目錄結構
準備工作完成後我們來看下具體的實現吧 ✍️ ✍️ ✍️
CRUD
-
✅C
-
🍐 routes(
user.js
)router.post('/addUser',async (req, res)=> { let dataParam = { "name": req.body.name, "age": req.body.age }; let result =await service.addUser(dataParam); //在service中執行addUser() return res.json(result); });
-
🥑service(
user.js
)module.exports = { // 增加數據 async addUser(dataParam) { //dataParam是routes中傳入的參數 let data = await collection.save(dataParam); return data; } }
-
效果
- Arangodb
- postman
爲什麼呢❓🤔🤔🤔我們一起來看個知識點:
documentCollection.save
- Arangodb
-
-
語法:
async documentCollection.save(data, [opts]): Object
使用給定的數據創建一個新文檔,並返回一個包含文檔元數據(_id,_key和_rev屬性)的對象。
-
Arguments
-
data:
Object | Object[]
新文檔的數據,可以包含_key。
-
opts:
Object (optional)
如果設置了opts,則它必須是具有以下任何屬性的對象:
-
returnNew:
boolean
(Default: false)如果設置爲true,則另外在結果的new屬性下返回完整的新文檔。
-
returnOld:
boolean
(Default: false)如果設置爲true,則在結果中的屬性old下另外返回完整的舊文檔。
-
waitForSync:
boolean
(Default: false)等待文檔同步到磁盤。
-
…
-
-
迴歸正題,針對上面在postman中測試返回的數據中不顯示
name
和age
問題,將用上面提到的opts屬性中的 returnNew
來解決,services(user.js)中的代碼如下所示:-
代碼
module.exports = { // 增加數據 async addUser(dataParam) { //dataParam是routes中傳入的參數 let opts = { returnNew: true }; let data = await collection.save(dataParam,opts); return data; } }
-
效果圖
現在數據中是返回了
name
和age
,但是這樣的話_id,_key,_rev
字段會出現兩次,數據有點冗餘,那還有解決辦法嗎❓當然有,一起來看看吧(services(user.js)):👇👇👇-
代碼
module.exports = { // 增加數據 async addUser(dataParam) { let data = await collection.save(dataParam); let doc = await collection.document(data); return doc; } }
-
效果圖
-
-
-
🔍R
- collection.all()
-
語法:
async collection.all([opts]): Cursor
執行查詢以獲取集合中的所有文檔。返回查詢結果的新Cursor實例。
-
Arguments
- opts:
Object (optional)
- opts:
-
🌰
-
🍐 routes(user.js)
router.get('/getUser', async (req, res) => { let list = await service.getAllUsers(); return res.json(list); });
-
🥑services(user.js)
// 獲取數據 let value =await collection.all(); return value._result;
-
效果圖
-
-
- collection.all()
-
✍️U
- collection.update()
-
語法:
async collection.update(documentHandle, newValue, [opts]): Object
使用給定的documentHandle和給定的newValue更新(合併)文檔的內容,並返回一個包含文檔元數據的對象。
-
Arguments
-
documentHandle:
string
可以是集合中文檔的_id或_key,也可以是文檔(即具有_id或_key屬性的對象)。
-
newValue:
Object
文檔的新數據
-
opts:
Object (optional)
-
-
🌰
-
🍐 routes(user.js)
router.post('/updateUser',async (req, res)=> { let dataParam = { "_key":req.body._key, "name": req.body.name, "age": req.body.age }; let result =await service.updateUsers(dataParam); //在service中執行addUser() return res.json(result); });
-
🥑services(user.js)
// 修改數據 async updateUsers(param){ let dataUpdate=await collection.update(param._key,param); let data=await collection.document(dataUpdate); return data; }
-
效果圖
-
-
- collection.update()
-
❎D
- collection.remove()
-
語法:
async collection.remove(documentHandle, [opts]): Object
-
Arguments
-
documentHandle:
string
可以是集合中文檔的_id或_key,也可以是文檔(即具有_id或_key屬性的對象)
-
opts:
Object (optional)
-
-
🌰
-
🍐 routes(user.js)
router.delete('/removeUser',async (req, res)=> { let _key=req.body._key; let result =await service.removeUsers(_key); //在service中執行addUser() return res.json(result); });
-
🥑services(user.js)
// 刪除數據 async removeUsers(param){ let dataRemove=await collection.remove(param); return dataRemove; }
-
效果圖
-
-
- collection.remove()