微信小程序——操作數據庫

案例一:統計用戶的訪問次數

業務需求:

  • 統計每個用戶對程序的訪問次數
  • 將訪問次數存儲到數據庫中
  • 訪問次數應該與用戶進行關聯

業務邏輯:

  • 如果用戶是第一次訪問此程序,向數據庫添加一條記錄:{openid:45454545,count:1}
  • 如果用戶不是第一次訪問,首先獲取數據庫中改用戶的訪問次數然后+1,再保存到數據庫中,然后更新頁面中的訪問次數

實現步驟:

在項目的pages中創建count_demo

在項目的pages中創建count_demo文件夾 在count_demo文件夾中創建page命名為count_demo

在這里插入圖片描述

設置程序的主顯示頁面
  • 將程序主頁設置為剛添加的count_demo

  • 將app.json中剛添加的"pages/count_demo/count_demo"放到開始位置
    在這里插入圖片描述

  • 查看剛剛創建的count_demo中的count_demo.js文件

      /*** 生命周期函數--監聽頁面加載*/onLoad: function (options) {},/*** 生命周期函數--監聽頁面初次渲染完成*/onReady: function () {},/*** 生命周期函數--監聽頁面顯示*/onShow: function () {},/*** 生命周期函數--監聽頁面隱藏*/onHide: function () {},/*** 生命周期函數--監聽頁面卸載*/onUnload: function () {},/*** 頁面相關事件處理函數--監聽用戶下拉動作*/onPullDownRefresh: function () {},/*** 頁面上拉觸底事件的處理函數*/onReachBottom: function () {},/*** 用戶點擊右上角分享*/onShareAppMessage: function () {}
    
    • 頁面編譯時執行的下面函數
      • onload函數—onshow函數–onready
    • 當頁面切換時執行
      • onhide函數 切換回來時執行 onshow函數
創建數據庫(counters)

在這里插入圖片描述

編輯count_demo.wxml

在這里插入圖片描述

編輯count_dome.js
  • 在count_demo.js中定義變量實現數據的綁定

    Page({data: {count:0},})
    
  • 在onload函數中 查詢登錄用戶的訪問次數

    • 獲取數據庫的引用

      const db=wx.cloud.database()

    • 獲取要操作的集合

      const counters=db.collection(‘counters’)

    • 查詢用戶在counters集合中的數據

      //查詢用戶在counters集合中的數據db.collection('counters').get().then(res=>{console.log(res)})
      
    • 輸出結果
      在這里插入圖片描述

    • 可以根據返回data數組的長度來判斷用戶是否是第一次訪問

      • 如果長度大于0說明已經登陸過就更新數據
        • 創建更新指令
          在這里插入圖片描述
        • 更新訪問次數
           if(res.data.length>0){//更新訪問次數db.collection('counters').doc(res.data[0]._id).update({data:{count:_.inc(1)}})//在頁面上顯示的訪問次數this.setData({count:++res.data[0].count})}else
          
      • 如果沒有數據說明未訪問過就插入數據 并更新本地數據
        else{//新增數據db.collection('counters').add({data:{count:1}}).then(res=>{this.setData({count:1})})}
        

案例二:查詢并展示數據

業務需求:

  • 查詢數據庫中的數據并展示
  • 頁面加載時查詢第一頁的數據
  • 向上拉動頁面到底部時查詢下一頁數據
  • 如果數據庫中沒有更多數據時,向上拉動不進行查詢

實現步驟:

創建集和導入數據(demo_list)為集合設置權限

在這里插入圖片描述
在這里插入圖片描述

創建demo_list
  • 之間在app.json中的pages配置中的第一行寫入保存即可創建并且訪問主頁也為該頁面
    在這里插入圖片描述
編輯demo_list.js文件
  • 自定義函數getListData分頁查詢數據

    // pages/demo_list/demo_list.js
    Page({data: {page_size: 8, //每頁顯示的數量page_count: 0, //頁碼dataList: [],isRequest:true,//是否請求,放數據庫中沒有更多數據時不再請求},onLoad() {this.getListData()},//分頁獲取數據getListData() {if(!this.data.isRequest){return}//獲取數據庫const db = wx.cloud.database()//計算skip函數的參數值let offset = this.data.page_count * this.data.page_size//查詢集合中的數據db.collection('demo_list').skip(offset).limit(this.data.page_size).get().then(res => {this.setData({dataList:this.data.dataList.length===0 ? res.data :this.data.dataList.concat(res.data)})res.data.length!==this.data.page_size?this.setData({isRequest:false}):true})},/*** 頁面上拉觸底事件的處理函數*/onReachBottom: function () {this.setData({page_count:++this.data.page_count})this.getListData()}
    })
    
    1. 獲取數據庫
    2. 查詢數據 skip是查詢時跳過的條數 limit是查詢時要查詢的條數
    3. skip的參數值就是定義的查詢的條數*頁碼數=已經查詢出來的條數
    4. 當用戶第一次訪問時(dataList中沒有數據)將數據賦值給dataList變量 如果有數據將兩個數組進行合并。
    5. 當請求數組返回時數據的數量不等于我們的設置值時 說明數據沒有更多了,我們將isRequest的值設置為false,當他的值為true的時候才允許查詢數據
  • 頁面刷新時調用

      onLoad() {this.getListData()},
    
  • 當用戶下拉到底部時(onReachBottom事件觸發)調用 并且請求頁碼累加

    /*** 頁面上拉觸底事件的處理函數*/onReachBottom: function () {this.setData({page_count:++this.data.page_count})this.getListData()}
    
編輯demo_list.wxml文件

點我進入下載壓縮包
在這里插入圖片描述

  • 壓縮包中找到dis目錄進入example\panel\panel.wxml文件中復制代碼

    <view class="page"><view class="weui-panel weui-panel_access"><view class="weui-panel__bd"><view class="weui-media-box weui-media-box_text" wx:for="{{dataList}}" wx:key="_id"><h4 class="weui-media-box__title">{{item.title}}</h4><view class="weui-media-box__desc">{{item.description}}</view></view></view></view>
    </view>
    
  • 將style文件夾中的樣式文件復制到我們的項目中并且全局引用
    在這里插入圖片描述

  • 最后遍歷數據即可
    在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/248752.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/248752.shtml
英文地址,請注明出處:http://en.pswp.cn/news/248752.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

shop--12.阿里云部署以及域名綁定

一、申請阿里云服務器&#xff08;1&#xff09;PC訪問阿里云https://www.aliyun.com/&#xff0c;申請阿里云帳號&#xff08;可以用您的支付寶帳號登錄&#xff0c;因為支付寶帳號已經進行了實名認證&#xff0c;使用起來更方便&#xff09;并登錄&#xff08;2&#xff09;找…

微信小程序——獲取用戶的運動步數

程序獲取用戶信息步驟 點擊參考微信文檔中的授權首先程序先向用戶申請訪問哪些權限用戶做出選擇后返回給程序程序攜帶權限訪問服務器如果用戶允許則返回信息如果用戶為允許則不返回 自定義函數getUserRun 為獲取用戶的微信運動數據 頁面加載調用此函數函數中執行下面操作 1…

C++之前置自增與后置自增

關于前置自增與后置自增的區別我是參考這里&#xff1a;http://bbs.bccn.net/thread-454977-1-1.html 簡單復述下&#xff0c;比如x; 與 x; 在C中&#xff0c;x這個表達式的值為原先x的值1&#xff0c;副作用是x的值增加了1&#xff1b;&#xff08;C中不是這樣定義的&#xff…

第一次個人作業

該作業所屬課程&#xff1a;https://edu.cnblogs.com/campus/xnsy/SoftwareEngineeringClass2作業要求地址&#xff1a;https://edu.cnblogs.com/campus/xnsy/SoftwareEngineeringClass2/homework/3340團隊名稱&#xff1a;腦殼痛 作業的目標 1.通過測試其他組的軟件項目學習其…

微信小程序——解決上傳并部署云函數時報錯ResourceNotFound.Function, 未找到函數版本,請創建后再試。 (7f2d9d2d-5eac-4575-9n57-acd66cfa587g

1. 上傳部署我們的云函數 2. 報錯 錯誤信息為&#xff1a;Error: ResourceNotFound.Function, 未找到函數版本&#xff0c;請創建后再試。 (7f2d9d2d-5eac-4575-9b57-acd66cfa587e) 3. 原因 原因是可能我們在調試的時候不小心將我們開發控制臺中的云函數刪除了 4. 解決辦法…

前端面試題——HTML基礎篇

如何進行網站的性能優化 content方面 減少http請求 合并文件 css精靈圖減少 DNS 查詢 DNS緩存 將資源分布到恰當數量的主機名減少 DOM 元素的數量 Server方面 使用CDN配置Etag對組件使用 Gzip 壓縮 Cookie方面 減小cookie大小 css方面 將樣式表放到頁面頂部不使用css表…

【IT界的廚子】醬香鱸魚

食材: 前世曾經回眸的鱸魚一條(主要選刺少的魚&#xff0c;適合孩子吃&#xff0c;大人吃隨意&#xff0c;草魚比較大) 五花肉少許(肥一些的) 豆腐 輔料: 蔥姜 蒜(選) 大料 香菜 調味: 啤酒(兩罐) 黃豆醬或豆瓣醬(選) 老抽 生抽 料酒 鹽 步驟: 1、魚肉劃開&#xff0c;方便燉的…

第二章:09流程控制[3for]

①格式for(初始化語句;判斷條件語句;控制條件語句) { 循環體語句; } ②注意事項A:判斷條件語句無論簡單還是復雜結果是boolean類型。 B:循環體語句如果是一條語句,大括號可以省略&#xff1b;如果是多條語句,大括號不能省略。建議永遠不要省略。 C:一般來說&#xff1a;有左大括…

LeetCode,第377場周賽,個人題解

目錄 100148.最小數字游戲 題目描述 思路分析 代碼詳解 100169.移除柵欄得到的正方形田地的最大面積 題目描述 思路分析 代碼詳解 100156.轉換字符串的最小成本I 題目描述 思路分析 代碼詳解 100158.轉換字符串的最小成本II 題目描述 思路分析 代碼詳解 100148.…

for each....in、for in、for of

一、一般的遍歷數組的方法: var array [1,2,3,4,5,6,7]; for (var i 0; i < array.length; i) { console.log(i,array[i]); } 二、用for in的方遍歷數組 for(let index in array) { console.log(index,array[index]); }; 三、forEach array.forEach(v>{ cons…

Vue cli3.0創建Vue項目

創建Vue項目 在要創建項目的文件夾下面打開Powershell窗口 輸入命令 vue create 項目名稱 選擇第二項 回車后 選擇是否使用歷史路由 no 回車 選擇 Less 回車 選擇第三個 回車 選擇第一個 回車 選擇第一個 回車 是否保存模板 選擇no 完成啦 完成

文件內容的輸出io

package bbb; import java.io.*; public class ccc {public static void main(String[]args) throws IOException{ File filenew File("d:/1data.txt"); FileOutputStream outnew FileOutputStream(file); byte buy[]"12345abcdef#%&*軟件工程".getByt…

看完后完全了解 Vue 2.0 和 Vue 3.0 的區別

1.數據的雙向綁定 Vue2.0使用Object.defineProperty 原理&#xff1a;通過使用 Object.defineProperty 來劫持對象屬性的 geter 和 seter 操作&#xff0c;當數據發生改變發出通知 代碼&#xff1a; 1 <!DOCTYPE html>2 <html lang"en">3 <head>4…

channels2.X 學習筆記

- No module named asgiref.sync 報錯解決&#xff1a; # 報錯原因&#xff1a; """ django版本過低&#xff0c; 卸載最新版本的 channels 使用2.x 版本的 """ pip3 uninstall channels - 安裝&#xff1a; """ Django 1.11.15 …

風格遷移學習筆記

風格遷移大作業 學習規劃 跑通一份代碼&#xff01;&#xff01;&#xff01;&#xff08;done&#xff09;對照代碼、Blog和論文理解相應的算法過程規劃下一步&#xff0c;修改代碼&#xff08;done&#xff09;&#xff0c;實現預計功能&#xff08;done&#xff09;調參&…

Netty源碼分析第5章(ByteBuf)----第5節: directArena分配緩沖區概述

Netty源碼分析第5章(ByteBuf)---->第5節: directArena分配緩沖區概述 Netty源碼分析第五章: ByteBuf 第五節: directArena分配緩沖區概述 上一小節簡單分析了PooledByteBufAllocator中, 線程局部緩存和arean的相關邏輯, 這一小節簡單分析下directArena分配緩沖區的相關過程 …

uni-app(從零開始)

uni-app&#xff08;從零開始&#xff09; uni-app 是什么&#xff1f; uniapp 就是使用Vue.js技術開發所有前端框架的跨端框架uniapp 就是可以將一套代碼 發布到多個平臺 uniapp 和 Vue 的關系&#xff1f; uniapp是基于vue進行開發&#xff0c;繼承了Vue的特性和語法在開…

Remote desktop manager共享賬號

因為多個遠程機器&#xff0c;是會用了域賬號進行登錄的。而域賬號的密碼&#xff0c;三個月之后&#xff0c;密碼強制過期 添加一個新的entry&#xff0c;類型是Credential Entry&#xff0c;然后選擇用戶名/密碼 在remote desktop編輯的頁面&#xff0c;Credentials選擇Crede…

bzoj4403:序列統計

我好傻啊 題目 先來看看長度只能為\(n\)的情況 那么答案非常顯然是\(\binom{mn-1}{n}\) 其中\(mR-L1\) 因為我們要構造一個非降序列&#xff0c;顯然可能一個數會被選擇多次&#xff0c;組合非常不好做&#xff0c;于是我們可以把每一個數的下標加上其對應的下標那么現在的值域…

Mui常用的方法

中對話框 語法&#xff1a;mui.confirm 用法 mui.confirm("確認要切換角色&#xff1f;", "提示", btnArray, function(e) {if(e.index 1) {} else {}});組件名作用alert警告框confirm確認框prompt輸入對話框toast消息提示框&#xff08;自動消失&#x…