W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
獲取集合的引用。方法接受一個(gè) name 參數(shù),指定需引用的集合名稱。
name: string 集合名稱
Collection
const cloud = require('qq-server-sdk')
cloud.init({
env: cloud.DYNAMIC_CURRENT_ENV
})
const db = cloud.database()
const todosCollection = db.collection('todos')
創(chuàng)建集合,如果集合已經(jīng)存在會創(chuàng)建失敗
collectionName: string
Promise.<Object>
屬性 | 類型 | 說明 |
---|---|---|
errMsg | string |
具體接口查看 Command 文檔
const _ = db.command
db.collection('todos').doc('doc-id').update({
data: {
tags: _.addToSet('database')
}
})
數(shù)據(jù)庫地理位置結(jié)構(gòu)集
構(gòu)造一個(gè)地理位置 ”點(diǎn)“。方法接受兩個(gè)必填參數(shù),第一個(gè)是經(jīng)度(longitude
),第二個(gè)是緯度(latitude
),務(wù)必注意順序。
開始事務(wù),另一個(gè)同樣可以使用的發(fā)起事務(wù)的 API 是 runTransaction。僅可在云函數(shù)中使用。
Promise.<Transaction> resolve 的結(jié)果為事務(wù)操作對象,其上可通過 collection API 操作數(shù)據(jù)庫,通過 commit 或 rollback 來結(jié)束或終止事務(wù)。
事務(wù)現(xiàn)僅支持在云函數(shù) qq-server-sdk 使用。事務(wù)操作時(shí)為保障效率和并發(fā)性,只允許進(jìn)行單記錄操作,不允許進(jìn)行批量操作,但可以在一個(gè)事務(wù)中對多個(gè)記錄進(jìn)行操作。
兩個(gè)賬戶之間進(jìn)行轉(zhuǎn)賬的簡易示例
const cloud = require('qq-server-sdk')
cloud.init({
env: cloud.DYNAMIC_CURRENT_ENV
})
const db = cloud.database({
throwOnNotFound: false,
})
const _ = db.command
exports.main = async (event) => {
try {
const transaction = await db.startTransaction()
const aaaRes = await transaction.collection('account').doc('aaa').get()
const bbbRes = await transaction.collection('account').doc('bbb').get()
if (aaaRes.data && bbbRes.data) {
const updateAAARes = await transaction.collection('account').doc('aaa').update({
data: {
amount: _.inc(-10)
}
})
const updateBBBRes = await transaction.collection('account').doc('bbb').update({
data: {
amount: _.inc(10)
}
})
await transaction.commit()
console.log(`transaction succeeded`)
return {
success: true,
aaaAccount: aaaRes.data.amount - 10,
}
} else {
await transaction.rollback()
return {
success: false,
error: `rollback`,
rollbackCode: -100,
}
}
} catch (e) {
console.error(`transaction error`, e)
return {
success: false,
error: e
}
}
}
發(fā)起事務(wù)。僅可在云函數(shù)中使用。
callback: function 事務(wù)執(zhí)行函數(shù),需為 async 異步函數(shù)或返回 Promise 的函數(shù) times: number 事務(wù)執(zhí)行最多次數(shù),默認(rèn) 3 次,成功后不重復(fù)執(zhí)行,只有事務(wù)沖突時(shí)會重試,其他異常時(shí)不會重試
Promise.<any> resolve 的結(jié)果為 callback 事務(wù)執(zhí)行函數(shù)的返回值,reject 的結(jié)果為事務(wù)執(zhí)行過程中拋出的異?;蛘呤?transaction.rollback 傳入的值
事務(wù)執(zhí)行函數(shù)由開發(fā)者傳入,函數(shù)接收一個(gè)參數(shù) transaction(類型定義見 Transaction),其上提供 collection 方法和 rollback 方法。collection 方法用于取數(shù)據(jù)庫集合記錄引用進(jìn)行操作,rollback 方法用于在不想繼續(xù)執(zhí)行事務(wù)時(shí)終止并回滾事務(wù)。 事務(wù)執(zhí)行函數(shù)必須為 async 異步函數(shù)或返回 Promise 的函數(shù),當(dāng)事務(wù)執(zhí)行函數(shù)返回時(shí),SDK 會認(rèn)為用戶邏輯已完成,自動(dòng)提交(commit)事務(wù),因此務(wù)必確保用戶事務(wù)邏輯完成后才在 async 異步函數(shù)中返回或 resolve Promise。 事務(wù)執(zhí)行函數(shù)可能會被執(zhí)行多次,在內(nèi)部發(fā)現(xiàn)事務(wù)沖突時(shí)會自動(dòng)重復(fù)執(zhí)行,如果超過設(shè)定的執(zhí)行次數(shù)上限,會報(bào)錯(cuò)退出。 在事務(wù)執(zhí)行函數(shù)中發(fā)生的錯(cuò)誤,都會認(rèn)為事務(wù)執(zhí)行失敗而拋錯(cuò)。 事務(wù)執(zhí)行函數(shù)返回的值會作為 runTransaction 返回的 Promise resolve 的值,在函數(shù)中拋出的異常會作為 runTransaction 返回的 Promise reject 的值,如果事務(wù)執(zhí)行函數(shù)中調(diào)用了 transaction.rollback,則傳入 rollback 函數(shù)的值會作為 runTransaction 返回的 Promise reject 的值。
事務(wù)現(xiàn)僅支持在云函數(shù) qq-server-sdk 使用。事務(wù)操作時(shí)為保障效率和并發(fā)性,只允許進(jìn)行單記錄操作,不允許進(jìn)行批量操作,但可以在一個(gè)事務(wù)中對多個(gè)記錄進(jìn)行操作。
開發(fā)者提供的事務(wù)執(zhí)行函數(shù)正常返回時(shí),SDK 會自動(dòng)提交(commit)事務(wù),請勿在事務(wù)執(zhí)行函數(shù)內(nèi)調(diào)用 transaction.commit 方法,該方法僅在通過 db.startTransaction 進(jìn)行事務(wù)操作時(shí)使用。
兩個(gè)賬戶之間進(jìn)行轉(zhuǎn)賬的簡易示例
const cloud = require('qq-server-sdk')
cloud.init({
env: cloud.DYNAMIC_CURRENT_ENV
})
const db = cloud.database({
throwOnNotFound: false,
})
const _ = db.command
exports.main = async (event) => {
try {
const result = await db.runTransaction(async transaction => {
const aaaRes = await transaction.collection('account').doc('aaa').get()
const bbbRes = await transaction.collection('account').doc('bbb').get()
if (aaaRes.data && bbbRes.data) {
const updateAAARes = await transaction.collection('account').doc('aaa').update({
data: {
amount: _.inc(-10)
}
})
const updateBBBRes = await transaction.collection('account').doc('bbb').update({
data: {
amount: _.inc(10)
}
})
console.log(`transaction succeeded`)
// 會作為 runTransaction resolve 的結(jié)果返回
return {
aaaAccount: aaaRes.data.amount - 10,
}
} else {
// 會作為 runTransaction reject 的結(jié)果出去
await transaction.rollback(-100)
}
})
return {
success: true,
aaaAccount: result.aaaAccount,
}
} catch (e) {
console.error(`transaction error`, e)
return {
success: false,
error: e
}
}
}
構(gòu)造正則表達(dá)式,僅需在普通 js 正則表達(dá)式無法滿足的情況下使用
屬性 | 類型 | 默認(rèn)值 | 必填 | 說明 |
---|---|---|---|---|
regexp | string | 是 | 正則表達(dá)式字符串 | |
options | string | 否 | 正則表達(dá)式模式 |
flag | 說明 |
---|---|
i | 大小寫不敏感 |
m | 跨行匹配;讓開始匹配符 ^ 或結(jié)束匹配符 $ 時(shí)除了匹配字符串的開頭和結(jié)尾外,還匹配行的開頭和結(jié)尾 |
s 讓 . 可以匹配包括換行符在內(nèi)的所有字符
// 原生 JavaScript 對象
db.collection('todos').where({
description: /miniprogram/i
})
// 數(shù)據(jù)庫正則對象
db.collection('todos').where({
description: db.RegExp({
regexp: 'miniprogram',
options: 'i',
})
})
// 用 new 構(gòu)造也是可以的
db.collection('todos').where({
description: new db.RegExp({
regexp: 'miniprogram',
options: 'i',
})
})
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: