• WeChat小程序开发(九、数据库的基本操作,云函数的初步了解)


    笔记整理自b站课程 微信小程序云开发基础到实战 云数据库 云函数 云存储 云调用【新视觉】

    具体更加详细的内容可查看微信官方文档-云开发-SDK文档

    根据id查询数据库:

    db.collection('datebaseName').doc('id').get({
       ...
    })

    这个id是区分记录的唯一标识符,一般是系统默认分配不用手动操作的。

    使用数据库时经常会多次在获得的数据库记录后再次调用数据库,如果次数过多会形成 回调地狱。

    db.collection('dbName').get({
        success:res1=>{
            db.collection('dbName').get({
                success:res2=>{
                    db.collection('dbName').get({
                        ....
                    })
                }
            })
        }
    })
    //回调地狱

    这里可以采用经过ES6 Promise封装过的方法解决:

    db.collection('dbName').get().then(res1=>{
        ...
    }).then(res2=>{}).catch(err={})
    //then里的res就是上面的success中的res
    //catch里的err就是fail里的err

    形成链式结构更容易让人理清结构,也更容易书写。

    promise中的其他封装方法有:

    var a=e.detail.value.a
    var b=e.detail.value.b
    var c=e.detail.value.c
    //上面三行就等于下面的这一行
    
    var {a,b,c}=e.detailo.value//封装后

    关于删除数据库里的记录用remove方法:

    //js里删除数据库的记录必须用dos
    db.collection('dbName').doc('id').remove().then(res=>{})

    获取数据表中记录的个数:

    db.collection('dbName').count().then(res=>{
    ...
    })

    监听数据表,数据表有变化会被监听

    db.collection('dbName').watch({
        onChange:res=>{
           ...
        }
        onErr:err=>{
           ...
        }
    })

    限制传递的记录个数:

    db.collection('dbName').where().limit(3).get().then(res=>{})

    orderBy排序

    db.collection('dbName').limit(3).orderBy('name','asc/desc').get().then(res=>{})

    skip跳过前面前n条数据

    db.collection('dbName').limit(3).skip(n).orderBy('name','asc').get().then(res=>{})

    数据库中 command的使用

    const db=wx.cloud.database()
    const _=db.command;
    
    db.collection('dbName')
    .where({
    //hits:_.eq('abc')//等于
    //hits:_.neq('abc')//不等于
    //hit:_.lt(333)//筛选小于333的值
    //hit:_.gte(333)//筛选大于等于333的值
    //hit:_.in([255,666])//筛选数值为255或666的值
    //hit:_.nin([255,666])//筛选数值不为255和666的值
    
    })
    .get()
    .then()

    筛选某值为0-100的记录

    db.collection('dbName')
    .where({
        hits:_and(_.gt(0),_lt(100))
    })
    .get()
    .then()

    表示满足hits=123并且name=abc的满足条件,可被选中

    db.collection('dbName')
    .where({
        hits:123,
        name:'abc'
    })
    .get()
    .then()

    针对数据表中多个属性的筛选操作:

    db.collection('dbName')
    .where({
        _.or([
        {
            hit:_lt(300)
        },
        {
            name:'abc'
        }
        ])
    })
    //表示筛选满足hit:_lt(300)或者name:'abc'的记录

    关于数值字段的查询

    db.collection('dbName')
    .where({
    tabs:_.size(3)//筛选某数组属性的元素个数为n的记录
    //tabs:_.all(['a','b'])筛选tabs(数组)里同时包含'a'.'b'的记录
    })
    .get()
    .then()

    关于update里的相关操作:

    db.collection('dbName')
    .updata({
        data:{
            hits:_.inc(n)//每次hits都自增n,n可正可负
            //这是原子操作,即不会有进程并发问题
            time:_remove()//删除time属性这项
            style:{//原记录里没有style,可以这样直接增加这个属性
                color:'red',
                size:'12px'
            }
            tabs:_.push(['c'])//对tabs数组中增加为c的元素
            tabs:_.pop(['c'])//删除tabs中为c的元素
            tabs:_.unshift(['d'])//在数组最前面增加元素'd',即tabs[0]='d'
            tabs:——.shift()//删除数组中的头元素。
            tabs:_.pull('b')//移除tabs数组中值为b的元素
            tabs:_.push({
                each:['e'],//增加的元素为e
                position:1//元素e的位置为下标1
            })
        }
    })
    .get()
    .then()

    以上的数据库操作代码都是写在前端的js文档中,但是实际操作时我们把数据库操作部分放在云函数里来处理,前端之处理逻辑部分,这样可以把前后端的作用清晰的分开而更有规划

    对于云函数中处理数据库,其实大部分实质性的操作都和在前端处理没有区别:

    //云函数Js文件
    //云函数入门
    const cloud=require('wx-server-sdk')
    cloud.init()
    const db=cloud.database()
    //云函数入口函数
    exports.main = async(event,context)=>{
    return await db.collection('dbName').get()
    //等待异步请求进行返回
    }
    //云函数写完后一定要上传并部署云函数并且等待上传成功提示
    //调入云函数的js文件
    wx.cloud.callFunction({
    name:'cloudFunctionName'
    })
    .then(res=>{
    console.log('success',res)
    })
  • 相关阅读:
    【数据结构】并查集
    项目管理【12】 | 项目范围管理-收集需求
    项目管理【11】 | 项目范围管理-规划范围管理
    项目管理【10】 | 项目范围管理-范围管理概述
    Visual Studio代码远程调试方法
    项目管理【09】 | 项目整体管理-结束项目或阶段
    操作系统【2】Linux系统安装
    操作系统【1】Linux基础知识
    移动端开发案例【2】头部组件开发
    移动端开发案例【1】全局样式配置
  • 原文地址:https://www.cnblogs.com/SixteenTime/p/13415261.html
Copyright © 2020-2023  润新知