QQ小程序 Collection

2020-07-13 16:26 更新

Collection

數(shù)據(jù)庫集合引用

方法

Collection.doc(id: string): Document

獲取集合中指定記錄的引用。方法接受一個(gè) id 參數(shù),指定需引用的記錄的 _id。

Collection.add(options: Object): Promise<Object>

新增記錄,如果傳入的記錄對象沒有 _id 字段,則由后臺自動生成 _id;若指定了 _id,則不能與已有記錄沖突

Collection.count(): Promise<Object>

統(tǒng)計(jì)匹配查詢條件的記錄的條數(shù)

Collection.field(projection: Object): Collection

指定返回結(jié)果中記錄需返回的字段

Collection.get(): Promise<Object>

獲取集合數(shù)據(jù),或獲取根據(jù)查詢條件篩選后的集合數(shù)據(jù)。

Collection.limit(value: number): Collection

指定查詢結(jié)果集數(shù)量上限

Collection.orderBy(fieldPath: string, string: order): Collection

指定查詢排序條件

Collection.remove(): Promise<Object>

刪除多條記錄。注意只支持通過匹配 where 語句來刪除,不支持 skip 和 limit。

Collection.skip(offset: number): Collection

指定查詢返回結(jié)果時(shí)從指定序列后的結(jié)果開始返回,常用于分頁

Collection.update(): Promise<Object>

更新多條記錄

Collection.where(condition: Object): Collection

指定查詢條件,返回帶新查詢條件的新的集合引用

doc

Collection.doc(id: string): Document

獲取集合中指定記錄的引用。方法接受一個(gè) id 參數(shù),指定需引用的記錄的 _id。

參數(shù)

id: string 記錄 _id

返回值

Document

示例代碼

const myTodo = db.collection('todos').doc('my-todo-id')

add

Collection.add(options: Object): Promise<Object>

新增記錄,如果傳入的記錄對象沒有 _id 字段,則由后臺自動生成 _id;若指定了 _id,則不能與已有記錄沖突

參數(shù)

options: Object 屬性 類型 默認(rèn)值 必填 說明
data Object 新增記錄的定義

返回值

Promise.<Object>

屬性 類型 說明
_id string/number 新增的記錄 _id

示例代碼 新增一條待辦事項(xiàng):

db.collection("todos")
  .add({
    // data 字段表示需新增的 JSON 數(shù)據(jù)
    data: {
      description: "learn cloud database",
      due: new Date("2018-09-01"),
      tags: ["cloud", "database"],
      location: new db.Geo.Point(113, 23),
      done: false
    }
  })
  .then(res => {
    console.log(res);
  })
  .catch(console.error);

count

Collection.count(): Promise<Object>

統(tǒng)計(jì)匹配查詢條件的記錄的條數(shù)

返回值

Promise.<Object>

屬性 類型 說明
total number 結(jié)果數(shù)量

使用說明

統(tǒng)計(jì)集合記錄數(shù)或統(tǒng)計(jì)查詢語句對應(yīng)的結(jié)果記錄數(shù) 小程序端與云函數(shù)端的表現(xiàn)會有如下差異: 小程序端:注意與集合權(quán)限設(shè)置有關(guān),一個(gè)用戶僅能統(tǒng)計(jì)其有讀權(quán)限的記錄數(shù) 云函數(shù)端:因?qū)儆诠芾矶耍虼丝梢越y(tǒng)計(jì)集合的所有記錄數(shù) 示例代碼

const cloud = require('qq-server-sdk')
cloud.init({
  env: cloud.DYNAMIC_CURRENT_ENV
})
const db = cloud.database()
exports.main = async (event, context) => {
  return await db.collection('todos').where({
    _openid: 'xxx' // 填入當(dāng)前用戶 openid
  }).count()
}

field

Collection.field(projection: Object): Collection

指定返回結(jié)果中記錄需返回的字段

參數(shù)

projection: Object

返回值

Collection

說明

方法接受一個(gè)必填對象用于指定需返回的字段,對象的各個(gè) key 表示要返回或不要返回的字段,value 傳入 true|false(或 1|-1)表示要返回還是不要返回。 如果指定的字段是數(shù)組字段,還可以用以下方法只返回?cái)?shù)組的第一個(gè)元素:在該字段 key 后面拼接上 .$ 成為 字段.$ 的形式。

示例代碼

返回 description, done 和 progress 三個(gè)字段:

db.collection('todos').field({
  description: true,
  done: true,
  progress: true
})
  .get()
  .then(console.log)
  .catch(console.error)

get

Collection.get(): Promise<Object>

獲取集合數(shù)據(jù),或獲取根據(jù)查詢條件篩選后的集合數(shù)據(jù)。

返回值

Promise.<Object>

屬性 類型 說明
data Array.<Object> 查詢的結(jié)果數(shù)組,數(shù)據(jù)的每個(gè)元素是一個(gè) Object,代表一條記錄

使用說明

統(tǒng)計(jì)集合記錄數(shù)或統(tǒng)計(jì)查詢語句對應(yīng)的結(jié)果記錄數(shù) 小程序端與云函數(shù)端的表現(xiàn)會有如下差異:

  • 小程序端:如果沒有指定 limit,則默認(rèn)且最多取 20 條記錄。
  • 云函數(shù)端:如果沒有指定 limit,則默認(rèn)且最多取 100 條記錄。 如果沒有指定 skip,則默認(rèn)從第 0 條記錄開始取,skip 常用于分頁,例子可見第二個(gè)示例代碼。

示例代碼 1

獲取我的待辦事項(xiàng)清單:

const cloud = require('qq-server-sdk')
cloud.init({
  env: cloud.DYNAMIC_CURRENT_ENV
})
const db = cloud.database()
exports.main = async (event, context) => {
  return await db.collection('todos').where({
    _openid: 'xxx' // 填入當(dāng)前用戶 openid
  }).get()
}

示例代碼 2:分頁取數(shù)據(jù)

獲取我的第二頁的待辦事項(xiàng)清單,假設(shè)一頁 10 條,現(xiàn)在要取第 2 頁,則可以指定 skip 10 條記錄

db.collection('todos')
  .where({
    _openid: 'xxx', // 填入當(dāng)前用戶 openid
  })
  .skip(10) // 跳過結(jié)果集中的前 10 條,從第 11 條開始返回
  .limit(10) // 限制返回?cái)?shù)量為 10 條
  .get()
  .then(res => {
    console.log(res.data)
  })
  .catch(err => {
    console.error(err)
  })

示例代碼 3:取集合所有數(shù)據(jù)

獲取集合中的所有待辦事項(xiàng)清單:因?yàn)橛心J(rèn) limit 100 條的限制,因此很可能一個(gè)請求無法取出所有數(shù)據(jù),需要分批次?。?/p>

const cloud = require('qq-server-sdk')
cloud.init({
  env: cloud.DYNAMIC_CURRENT_ENV
})
const db = cloud.database()
const MAX_LIMIT = 100
exports.main = async (event, context) => {
  // 先取出集合記錄總數(shù)
  const countResult = await db.collection('todos').count()
  const total = countResult.total
  // 計(jì)算需分幾次取
  const batchTimes = Math.ceil(total / 100)
  // 承載所有讀操作的 promise 的數(shù)組
  const tasks = []
  for (let i = 0; i < batchTimes; i++) {
    const promise = db.collection('todos').skip(i * MAX_LIMIT).limit(MAX_LIMIT).get()
    tasks.push(promise)
  }
  // 等待所有
  return (await Promise.all(tasks)).reduce((acc, cur) => {
    return {
      data: acc.data.concat(cur.data),
      errMsg: acc.errMsg,
    }
  })
}

limit

Collection.limit(value: number): Collection

指定查詢結(jié)果集數(shù)量上限

參數(shù)

value: number

返回值

Collection

說明

limit 在小程序端默認(rèn)及最大上限為 20,在云函數(shù)端默認(rèn)及最大上限為 100

示例代碼

db.collection('todos').limit(10)
  .get()
  .then(console.log)
  .catch(console.error)
以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號