99re热视频这里只精品,久久久天堂国产精品女人,国产av一区二区三区,久久久精品成人免费看片,99久久精品免费看国产一区二区三区

QQ小程序 Database

2020-07-13 14:42 更新

Database.collection(name: string): Collection

獲取集合的引用。方法接受一個 name 參數(shù),指定需引用的集合名稱。

參數(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')

Database.createCollection(collectionName: string): Promise<Object>

創(chuàng)建集合,如果集合已經(jīng)存在會創(chuàng)建失敗

參數(shù)

collectionName: string

返回值

Promise.<Object>

屬性 類型 說明
errMsg string

Database.command: Command

數(shù)據(jù)庫操作符

具體接口查看 Command 文檔

示例代碼

const _ = db.command
db.collection('todos').doc('doc-id').update({
  data: {
    tags: _.addToSet('database')
  }
})

Database.Geo: Geo

數(shù)據(jù)庫地理位置結構集

方法

Geo.Point(longitude: number, latitude: number): GeoPoint

構造一個地理位置 ”點“。方法接受兩個必填參數(shù),第一個是經(jīng)度(longitude),第二個是緯度(latitude),務必注意順序。

Database.startTransaction(): Promise<Transaction>

開始事務,另一個同樣可以使用的發(fā)起事務的 API 是 runTransaction。僅可在云函數(shù)中使用。

返回值

Promise.<Transaction> resolve 的結果為事務操作對象,其上可通過 collection API 操作數(shù)據(jù)庫,通過 commit 或 rollback 來結束或終止事務。

限制

事務現(xiàn)僅支持在云函數(shù) qq-server-sdk 使用。事務操作時為保障效率和并發(fā)性,只允許進行單記錄操作,不允許進行批量操作,但可以在一個事務中對多個記錄進行操作。

示例代碼

兩個賬戶之間進行轉賬的簡易示例

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
    }
  }
}

Database.runTransaction(callback: function, times: number): Promise<any>

發(fā)起事務。僅可在云函數(shù)中使用。

參數(shù)

callback: function 事務執(zhí)行函數(shù),需為 async 異步函數(shù)或返回 Promise 的函數(shù) times: number 事務執(zhí)行最多次數(shù),默認 3 次,成功后不重復執(zhí)行,只有事務沖突時會重試,其他異常時不會重試

返回值

Promise.<any> resolve 的結果為 callback 事務執(zhí)行函數(shù)的返回值,reject 的結果為事務執(zhí)行過程中拋出的異?;蛘呤?transaction.rollback 傳入的值

事務執(zhí)行函數(shù)說明

事務執(zhí)行函數(shù)由開發(fā)者傳入,函數(shù)接收一個參數(shù) transaction(類型定義見 Transaction),其上提供 collection 方法和 rollback 方法。collection 方法用于取數(shù)據(jù)庫集合記錄引用進行操作,rollback 方法用于在不想繼續(xù)執(zhí)行事務時終止并回滾事務。 事務執(zhí)行函數(shù)必須為 async 異步函數(shù)或返回 Promise 的函數(shù),當事務執(zhí)行函數(shù)返回時,SDK 會認為用戶邏輯已完成,自動提交(commit)事務,因此務必確保用戶事務邏輯完成后才在 async 異步函數(shù)中返回或 resolve Promise。 事務執(zhí)行函數(shù)可能會被執(zhí)行多次,在內(nèi)部發(fā)現(xiàn)事務沖突時會自動重復執(zhí)行,如果超過設定的執(zhí)行次數(shù)上限,會報錯退出。 在事務執(zhí)行函數(shù)中發(fā)生的錯誤,都會認為事務執(zhí)行失敗而拋錯。 事務執(zhí)行函數(shù)返回的值會作為 runTransaction 返回的 Promise resolve 的值,在函數(shù)中拋出的異常會作為 runTransaction 返回的 Promise reject 的值,如果事務執(zhí)行函數(shù)中調(diào)用了 transaction.rollback,則傳入 rollback 函數(shù)的值會作為 runTransaction 返回的 Promise reject 的值。

限制

事務現(xiàn)僅支持在云函數(shù) qq-server-sdk 使用。事務操作時為保障效率和并發(fā)性,只允許進行單記錄操作,不允許進行批量操作,但可以在一個事務中對多個記錄進行操作。

注意事項

開發(fā)者提供的事務執(zhí)行函數(shù)正常返回時,SDK 會自動提交(commit)事務,請勿在事務執(zhí)行函數(shù)內(nèi)調(diào)用 transaction.commit 方法,該方法僅在通過 db.startTransaction 進行事務操作時使用。

示例代碼

兩個賬戶之間進行轉賬的簡易示例

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 的結果返回
        return {
          aaaAccount: aaaRes.data.amount - 10,
        }
      } else {
        // 會作為 runTransaction reject 的結果出去
        await transaction.rollback(-100)
      }
    })


    return {
      success: true,
      aaaAccount: result.aaaAccount,
    }
  } catch (e) {
    console.error(`transaction error`, e)


    return {
      success: false,
      error: e
    }
  }
}

Database.RegExp(options: Object)

構造正則表達式,僅需在普通 js 正則表達式無法滿足的情況下使用

參數(shù)說明

options: Object

屬性 類型 默認值 必填 說明
regexp string 正則表達式字符串
options string 正則表達式模式

options 取值說明

flag 說明
i 大小寫不敏感
m 跨行匹配;讓開始匹配符 ^ 或結束匹配符 $ 時除了匹配字符串的開頭和結尾外,還匹配行的開頭和結尾

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 構造也是可以的
db.collection('todos').where({
  description: new db.RegExp({
    regexp: 'miniprogram',
    options: 'i',
  })
})
以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號