云開發(fā) 數據庫 CRUD

2020-07-22 15:34 更新

上一節(jié)演示了云函數的基本 DEMO,但是比較簡單,就直接返回了一個“好好學習” 的 JSON 對象。這一小節(jié)來熟悉數據庫。

云開發(fā)提供了一個 NoSQL 數據庫,數據庫中的每條記錄都是一個 JSON 格式的對象。一個數據庫可以有多個集合(相當于關系型數據中的表),集合可看做一個 JSON 數組,數組中的每個對象就是一條記錄。

一般我們稱數據記錄的增加(Create)、讀取(Retrieve)、更新(Update)和刪除(Delete) 統(tǒng)稱為 CRUD。下面,我們基于云函數對數據庫進行操作。

創(chuàng)建數據庫集合(表)和創(chuàng)建一個云函數

第1步:創(chuàng)建一個數據集合,取名為 users

第2步:創(chuàng)建 4 個云函數,分別取名為:

  • insert_db
  • query_db
  • update_db
  • delete_db

如下圖:

如果還不了解如何創(chuàng)建云函數,可以查看上一篇「編寫第一個云函數」

插入數據

點擊云函數列表中的 “insert_db” 函數,進入代碼編輯頁面。在編寫代碼之前,我們需要安裝一個 Node.js 模塊 tcb-admin-node , 該模塊提供了在云函數或者說在Node.js 服務端器環(huán)境下,可以操作數據庫、云存儲等的一些方法/API。

創(chuàng)建 package.json 文件

因為需要引入 tcb-admin-node 模塊,所以先要創(chuàng)建 package.json 文件,可以按照如下圖片1,2,3,4進行。最后記得點擊【保存并安裝依賴】。

package.json 文件內容如下,可以復制進去。

{
  "dependencies": {
    "tcb-admin-node": "*"
  }
}

編寫代碼

第 1 步: 獲取該環(huán)境 ID
在控制臺左側邊欄點擊【環(huán)境】,點擊【環(huán)境縱覽】,復制環(huán)境 ID。后面代碼需要通過環(huán)境 ID,訪問環(huán)境的資源,例如數據庫。

第 2 步: 編寫代碼
往 index.js 文件中編寫如下代碼,并點擊【保存并安裝依賴】,代碼如下:

'use strict';
const tcb = require('tcb-admin-node')
const app = tcb.init({
  env: '你的環(huán)境 ID'
})


const db = app.database()


exports.main = async (event, context) => {
    let result = await db.collection('users').add({
        name:  'test',
        age: 25,
        create_time: new Date()
    })
    return result
}

下面分析代碼:

  • const tcb = require('tcb-admin-node') 引入云開發(fā) Node.js SDK;
  • const app = tcb.init({}) 初始化環(huán)境;
  • app.database() 獲取數據的引用;
  • db.collection('users') 其中 users 是 6.1 節(jié)中創(chuàng)建的數據庫集合,或者說“表”,這里獲取集合的引用;
  • add({}) 方法,輸入參數為 JSON 對象,這里是一個 user 記錄;
  • asyncawait JavaSript API,可以將異步轉成同步操作;

第 3 步:開啟 HTTP 觸發(fā)和路徑配置
整個配置過程可以參見上一篇 「編寫第一個云函數」 。配置一個觸發(fā)路徑,如下圖:

第 4 步:訪問 HTTP 并驗證數據是否插入
點擊鏈接,瀏覽器打開訪問一次,就插入一次數據。我們點擊左側邊欄【數據庫】,再點擊數據庫【users】,即可看到如下數據:

多請求幾次數據庫就會出現多幾條數據。

查詢數據

這里,我們使用一開始創(chuàng)建的 query_db 云函數。當然你可以繼續(xù)使用 insert_db 函數。如果不是使用上面的函數,這里我們同樣需要做以下幾件事:

  • 創(chuàng)建 package.json 并且填寫 package.json 內容,見 6.2.1 節(jié);
  • 使用【保存并安裝依賴】按鈕;
  • 需要復制環(huán)境 ID;
  • 需要配置云函數 HTTP 觸發(fā)路徑, 例如 /query_db;

查詢的代碼具體如下所示:

'use strict';
const tcb = require('tcb-admin-node')
//初始化環(huán)境
const app = tcb.init({
  env: '你的環(huán)境 ID'
})


//獲取數據引用
const db = app.database()


exports.main = async (event, context) => {
    //使用 where 方法查詢 name 為 test 數據
    //鏈式調用 get 方法,執(zhí)行查詢過程并返回數據
    let result = await db.collection('users').where({
        name:  'test'
    })
    .get() 
    //獲取返回的數據結果
    return result.data
}      

訪問配置的 HTTP 觸發(fā)路徑,即可查詢之前插入的數據,上面的插入請求了 3 次,所以數據返回的 3 條。

[
  {
  "_id": "5e847ab25ebfe17b0112ef031602897d",
  "age": 25,
  "create_time": "2020-05-16T12:50:03.492Z",
  "name": "test"
  },
  {
  "_id": "e2297d935ebfe86b00bcb9cb6e7c7f1a",
  "age": 25,
  "create_time": "2020-05-16T13:19:39.931Z",
  "name": "test"
  },
  {
  "_id": "a9bfcffc5ebfe88700b26c896baeac9f",
  "age": 25,
  "create_time": "2020-05-16T13:20:07.279Z",
  "name": "test"
  }
] 

如果需要返回兩條數據,可以使用 limit(2) ,返回 N 條,就 limit(N) 例如:

let result = await db.collection('users').where({ name: 'test'})
    .limt(2)
    .get() 

更新數據

同樣,如果是使用新創(chuàng)建的云函數,需要做以下幾件事:

  • 創(chuàng)建 package.json 并且填寫 package.json 內容,見 6.2.1 節(jié);
  • 使用【保存并安裝依賴】按鈕;
  • 需要復制環(huán)境 ID;
  • 需要配置云函數 HTTP 觸發(fā)路徑, 例如 /update_db;

這里我想更新所有符合要求的記錄的 age 值,全部更新為 88 歲,代碼如下:

'use strict';
const tcb = require('tcb-admin-node')
//初始化環(huán)境
const app = tcb.init({
  env: '你的環(huán)境 ID'
})


//獲取數據引用
const db = app.database()


exports.main = async (event, context) => {
    //使用 where 方法查詢 name 為 test 數據
    //將符合要求的數據的 age 字段值更新為 88
    let result = await db.collection('users').where({
        name:  'test'
    }).update({
        age: 88
    })
    return result
}

同樣請求 HTTP 服務,完成更新操作,瀏覽器返回數據如下,說明符合要求的 3 條數據均已更新。

{
  "requestId": "1589636820392_1_01781",
  "updated": 3
}

update 方法是局部更新,用于更新字段;如果替換某條記錄,可以使用 set 方法,具體見 數據庫替換更新

刪除數據

同樣,如果是使用新創(chuàng)建的云函數,需要做以下幾件事:

  • 創(chuàng)建 package.json 并且填寫 package.json 內容,見 6.2.1 節(jié);
  • 使用【保存并安裝依賴】按鈕;
  • 需要復制環(huán)境 ID;
  • 需要配置云函數 HTTP 觸發(fā)路徑, 例如 /delete_db;

'use strict';
const tcb = require('tcb-admin-node')
//初始化環(huán)境
const app = tcb.init({
  env: 'serverless-1d83e7'
})


//獲取數據引用
const db = app.database()


exports.main = async (event, context) => {
    //使用 where 方法查詢 name 為 test 數據
    //remove 刪除符合條件的所有數據
    let result = await db.collection('users').where({
        name:  'test'
    }).remove()
    return result
}

通過 HTTP 觸發(fā)云函數,瀏覽器返回 3 條數據被刪除:

{
  "requestId": "1589637228874_1_51061",
  "deleted": 3
}

通過 where 方法可以刪除符合條件的所有數據,如果只想刪除指定 _id 字段的 1 條數據,可以參見 刪除一條記錄

附錄

以上內容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號