雲數據庫使用
雲數據庫(數據存儲服務)是基於MongoDB託管在雲端的數據庫,數據以JSON格式存儲。作為開發者,您可以在客戶端內直接操作數據,也可以在雲函數中讀寫數據。
步驟一:設置數據表權限
小程序Serverless提供了一套簡明易懂的JSON語法用來控制用戶對資源的訪問,類似於身份驗證體系裡的IAM或者網絡安全中的ACL。您可以通過修改權限規則來控制數據表權限。
小程序Serverless會為每個新建的數據表自動提供一個默認權限規則。默認新建數據表無任何操作權限,您可以通過添加權限規則管理數據表的權限。
1.打開小程序雲控制檯,在雲數據庫頁面,單擊權限圖標
。
2.在設置數據庫權限頁面,設置權限規則。然後直接修改安全規則。
3.修改完成後,單擊確定。
步驟二:數據庫操作
創建數據表
小程序Serverless服務使用的是分佈式文件存儲數據庫MongoDB,以JSON格式存儲數據。數據庫中的每條記錄都是一個JSON格式的對象,一個數據庫可以包含多個集合(相當於關係型數據庫中的表)。您可以在控制檯上創建數據表。
1.打開小程序雲控制檯,在雲數據庫頁面,選擇要關聯的環境。
2.點擊添加圖標
,輸入數據表名稱,最後單擊確定。
小程序端調用
1.在小程序客戶端代碼根目錄執行以下命令安裝 SDK。
npm install @alicloud/mpserverless-sdk --save
2.在 app.js 中初始化SDK(全局只需初始化一次)
// 1. 引入必要的 sdk
import MPServerless from '@alicloud/mpserverless-sdk';
// 2. 在 app.js 中對 sdk 進行初始化
// 2.1 初始化 MPServerless
my.serverless = my.serverless || new MPServerless({
uploadFile: my.uploadFile,
request: my.request,
getAuthCode: my.getAuthCode,
}, {
// 2.2 參數能在小程序雲服務空間詳情中獲取
appId: '',
spaceId: '',
clientSecret: '',
endpoint: ''
});
3.在小程序頁面操作數據庫
// 1.添加一條記錄
my.serverless.db.collection('users').insertOne({
name: 'tom',
age: 1
})
.then(res => {})
.catch(console.error);
// 2.刪除一條記錄
my.serverless.db.collection('users')
.deleteOne({
name: 'Tom'
})
.then((res) => {
const hasDeleted = res.affectedDocs > 0;
})
.catch(console.error);
// 3.更新集合中的一條記錄
my.serverless.db.collection('users').updateOne({
name: 'jerry'
}, {
$set: {
age: 10
}
})
.then(res => {})
.catch(console.error);
// 4.查詢一條記錄
// 調用findOne方法查詢大於且最接近18歲的一條記錄的name。
// projection: { name: 1 }表示只返回name字段,其中1表示過濾,0表示排除。
// sort: { age: 1 }表示將查詢後的結果按升序排列,其中1表示升序,-1表示降序。
my.mpserverless.db.collection('users')
.findOne({
age: { $gt: 18 }
}, {
projection: { name: 1 },
sort: { age: 1 }
})
.then(res => { })
.catch(console.error);
雲函數端調用
// 添加一條記錄
module.exports = async function (ctx) {
return await ctx.mpserverless.db.collection('users').insertOne({
name: 'tom',
age: 1
});
};
數據庫常用語法說明
數據存儲服務是基於MongoDB託管在雲端的數據庫,使用MongoDB 3.4版本,常用的數據庫操作語法如下。
• 聚合查詢aggregate
• 計算記錄條數count
• 刪除一條數據記錄deleteOne
• 刪除一批數據記錄deleteMany
• 獲取去重後的記錄distinct
• 查詢記錄find
• 查詢單條記錄findOne
• 查詢並刪除一條記錄findOneAndDelete
• 查詢並替換一條記錄findOneAndReplace
• 查詢並更新記錄findOneAndUpdate
• 替換記錄replaceOne
• 添加一批記錄insertMany
• 添加一條記錄insertOne
• 更新一批記錄updateMany
• 更新一條記錄updateOne
設置數據庫索引
使用數據庫時,對成為查詢條件的字段設置索引可以有效提高查詢效率,更快的獲取信息。缺省情況下會對_id_字段默認創建一個非唯一索引。
1.在數據庫頁面,單擊目標數據表,然後單擊索引頁籤進入索引設置頁面。
2.點擊添加索引進入索引設置頁面。.
3.填寫索引名稱,設置索引屬性、索引字段。
• 索引屬性:可以設置為唯一索引或非唯一索引。
將字段設置為唯一索引後,可以防止不同記錄的被索引鍵上存儲相同值。
• 索引字段:支持單鍵索引和複合索引設置,字段按升序或降序排列。
單鍵索引是最常見的索引形式,針對一個指定字段建立索引。對於單字段索引,升序、降序的查詢效果一樣。
複合索引是是單鍵索引的升級版,針對多個字段聯合創建索引,先按照第一個字段排列,第一個字段相同的記錄按第二個字段排列,依次類推。
4.單擊保存按鈕,保存索引設置。

雲存儲使用
mpserverless.file 對象提供 uploadFile 和 deleteFile方法管理文件。上傳的文件將通過CDN進行網絡加速。
步驟一:設置文件權限
小程序Serverless提供了一套簡明易懂的JSON語法用來控制用戶對資源的訪問,類似於身份驗證體系裡的IAM或者網絡安全中的ACL。您可以通過修改權限規則來管理文件權限。
小程序Serverless會為每個新建的文件自動提供一個默認權限規則。默認規則規定所有文件都只有資源所有者可以進行寫操作,所有人可讀。您可以在控制檯上修改文件權限。
1.打開小程序雲控制檯,在雲存儲頁面,單擊權限圖標。
2.修改權限規則,然後單擊保存。
上面的權限規則由多個子規則組成,每個子規則包含以下信息:
• 範圍:用於定義規則生效範圍。在數據存儲的安全規則中,每一個規則的範圍是一個文件(路徑)。您可以通過文件路徑指定一個特定的文件, 也可以通過JavaScript的正則表達式指代一批文件或使用星號(*)指代所有文件。
• 操作:用於定義生效範圍內的特定操作。所有人都具有文件的讀權限。.write代表寫操作,* 代表所有操作。
• 策略:用於確定生效範圍內的特定操作是否允許。默認沒有標記為允許的操作,都是不允許的。策略是操作是否被允許的標記,可以是一個布爾值,或者是一個表達式。當策略衝突時,以最先出現的規則策略為準。如默認的權限規則策略表達式request.auth.userId == resource.auth.userId代表所有文件都只有資源所有者可以進行寫操作,所有人可讀。
步驟二:雲存儲操作
控制檯操作
1.打開小程序雲控制檯,在雲存儲頁面,單擊上傳文件。
2.單擊直接上傳或將文件拖拽至上傳區域。
文件上傳過程中,請勿刷新或關閉頁面,否則上傳任務會被中斷且列表會被清空。
3.上傳成功後,您可以單擊詳情查看圖片下載地址。
小程序端調用
1.在小程序項目的根目錄執行以下命令安裝 SDK。
npm install @alicloud/mpserverless-sdk --save
2.文件上傳或刪除。
// 選擇文件上傳
my.chooseImage({
chooseImage: 1,
success: res => {
const path = res.apFilePaths[0];
const options = {
filePath: path,
headers: {
contentDisposition: 'attachment',
},
};
my.serverless.file.uploadFile(options).then(console.log).catch(console.error);
},
});
// 刪除之前上傳的文件
my.serverless.file.deleteFile('https://resource.bspapp.com/xxx-xx/4b82ded0-0118-4de4-9f50-ab13110a1ffb.jpg').then(res => {
console.log(res);
}).catch(err => {
console.error(err);
});