日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

码code | 巧用2种方法,打破20条云开发数据库限制

發(fā)布時間:2025/4/5 数据库 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 码code | 巧用2种方法,打破20条云开发数据库限制 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

小程序·云開發(fā)是小程序的一種后端開發(fā)模式,能夠幫助開發(fā)者快速構(gòu)建微信小程序的后端服務(wù),無需再搭建服務(wù)器。

然而熟悉云開發(fā)的開發(fā)者應(yīng)該了解,即使云開發(fā)能基本滿足小程序開發(fā)需求,但在數(shù)據(jù)獲取上還是有所限制。

為了防止誤操作以及保護小程序體驗,開發(fā)者是需要避免一次性獲取過量的數(shù)據(jù),只獲取必要的數(shù)據(jù),所以服務(wù)器一次默認并且最多返回 20 條記錄。但對于有數(shù)據(jù)大量獲取需求的開發(fā)者來說,只能放棄云開發(fā)嗎?答案是no。

微信團隊之前在云課程上就已經(jīng)分享了打破數(shù)據(jù)庫列表限制的2種方法,通過云函數(shù)最多可獲得100條數(shù)據(jù)。(如果你也想上這類干貨課程,可以點擊鏈接填問卷,我們將根據(jù)大家的需求確定課程內(nèi)容,并將于近期上線課程,敬請關(guān)注公眾號。)

這次的方法分享是以音樂播放器小程序為實例,通過云函數(shù)調(diào)用云數(shù)據(jù)庫,實現(xiàn)用戶上傳音樂的功能。

音樂播放器的核心功能是播放歌曲,也就是需要它能夠獲取數(shù)據(jù)庫所存儲的歌曲信息,然后傳到小程序端,去實現(xiàn)播放器的播放、暫停、切換。

01 上傳歌曲信息至云數(shù)據(jù)庫

歌曲信息包括id、歌曲名、歌手、封面、音頻文件等。

playlist: [{_id: '',cover: '',singer: '',title: '',src: '' }],復(fù)制代碼

02 利用云函數(shù)獲取數(shù)據(jù)列表

getlist(){let that = this;wx.cloud.callFunction({name: ’getmlist’,//自己的云函數(shù)名稱success: res=>{wx.stopPullDownRefresh()if(res.result){let playlist = res.result.dataconsole.log({playlist})if(playlist = undefined playlist.length == 0){wx.showToast({title: ’no data’,})}else{that.setData({isShowArtcle: true,playlist: playlist,})}} },fail:err => {wx.stopPullDownRefresh()wx.showToast({title: ’no data’,})}}) } 復(fù)制代碼

然而目前的做法只能獲取20條數(shù)據(jù),也不能支持用戶上傳音樂文件并正常加載播放。為了實現(xiàn)這一功能,需要我們設(shè)置云函數(shù),調(diào)用云數(shù)據(jù)庫,從而打破數(shù)據(jù)限制。

方法1:分頁獲取數(shù)據(jù)

這個方法是將數(shù)據(jù)分為若干頁,用戶可以通過選擇頁數(shù)去獲取更多的數(shù)據(jù)。這也就需要指定skip,設(shè)置分頁,從第 0 條記錄開始取。假設(shè)一頁 10 條,現(xiàn)在要取第 2 頁,則可以指定 skip 10 條記錄。

代碼示例如下:

//云函數(shù)入口文件 const cloud = require('wx-server-sdk') cloud.init()//云函數(shù)入口函數(shù) exports.main = async (event, context) => {const db = cloud.database()db.collection('musiclist').where({// 填入當(dāng)前用戶 openid_openid: 'xxx', })//假設(shè)一頁有10條數(shù)據(jù).skip(10) .limit(10) .get().then(res => {console.log(res.data)}).catch(err => {console.error(err)})}復(fù)制代碼

方法2:獲取所有數(shù)據(jù)

這個方法是用戶可以直接獲取所有數(shù)據(jù),但因為默認limit100條,可能一個請求無法取出所有數(shù)據(jù),所以需要分批次獲取,將集合中的所有歌曲信息獲取出來。

代碼示例如下:

//云函數(shù)入口文件 const cloud = require('wx-server-sdk')const db = wx.cloud.database() cloud.init()//云函數(shù)入口函數(shù) exports.main = async (event, context) => {getall:async(){const db = wx.cloud.databaseconst Max_limit = 100// 先取出集合記錄總數(shù)const countResult = await db.collection('musiclist').count()const total = countResult.total// 計算需分幾次取const batchTimes = Math.ceil(total / Max_limit)const tasks = []for(let i = 0; i < batchTimes; i++) {const promise = db.collection('musiclist').skip(i * Max_limit).limit(Max_limit).get()tasks.push(promise)}// 等待所有return (await Promise.all(tasks)).reduce((acc, cur) => {data: acc.data.concat(cur.data),errMsg: acc.errMsg,})))} }復(fù)制代碼

這兩類方法,本質(zhì)上是多次通過云函數(shù)獲取數(shù)據(jù),最終成功獲取所有集合數(shù)據(jù)。

因為云函數(shù)端因?qū)儆诠芾矶?#xff0c;所以它可以統(tǒng)計所有集合的記錄數(shù)。同時云函數(shù)之間也可互相調(diào)用,還能通過云函數(shù)后端 SDK 搭配使用多種服務(wù),在數(shù)據(jù)獲取上有著一定的優(yōu)勢。當(dāng)大家在使用云開發(fā)時,不妨多利用云函數(shù)進行數(shù)據(jù)庫和存儲的操作。

互動福利

掃碼關(guān)注公眾號,回復(fù)關(guān)鍵詞『音樂』,就能獲取本次實例音樂播放器的源碼包。

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??


轉(zhuǎn)載于:https://juejin.im/post/5cf0ca966fb9a07eb30961a7

總結(jié)

以上是生活随笔為你收集整理的码code | 巧用2种方法,打破20条云开发数据库限制的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。