美文网首页微信小程序/小游戏
【微信小程序】云数据库

【微信小程序】云数据库

作者: 代码充电宝 | 来源:发表于2019-12-14 17:06 被阅读0次

    微信小程序的云数据库,无需搭建繁琐的服务器,一个人前后端全包,接单必备
    原文链接

    (1)插入数据

    • 获取数据库/数据表的引用
        // 获取默认数据库的引用
        // const db = wx.cloud.database()
    
        // 获取指定数据库的引用
        const db = wx.cloud.database({
          env: "debug-b14e9b"
        })
    
        // 获取数据表的引用
        const book = db.collection('book')
    
    • 插入记录
        // 获取默认数据库的引用
        const db = wx.cloud.database()
        // 插入数据库
        db.collection('book').add({
          data: {
            "name": "寻秦记",
            "show": true,
            "price": 50.0,
            "tasg": ["科幻", "悬疑"],
            "update": new Date('2019-10-01'),
            "location": new db.Geo.Point(113, 23),
            "extra": null,
            "desp": {
              "color": "red",
              "size": 340.0
            }
          },
          success: function(res) {
            // {errMsg: "collection.add:ok",id: "72527ac65df47f00032b5c9f07e529f9"}
            console.log(res)
          },
          fail: function(err) {
            console.log(err)
          }
        })
    

    <a name="RLZ5t"></a>

    (2)查询

    • 获取指定id的一条记录
        // 普通写法
        const db = wx.cloud.database()
        db.collection('book')
          .doc('72527ac65df47f00032b5c9f07e529f9')
          .get({
            success: function(res) {
              console.log(res.data)
            }
          })
    
        // promise写法
        db.collection('book')
          .doc('72527ac65df47f00032b5c9f07e529f9')
          .get()
          .then(res => {
            console.log(res.data)
          })
    
    • 条件查询
        // 普通写法
        const db = wx.cloud.database()
    
        // promise写法
        db.collection('book')
          .where({
            name: "唯一书名",
            desp: {
              color: 'red'
            },
            'desp.size': 340
    
          })
          .get()
          .then(res => {
            console.log(res.data)
          })
    
    • limit/skip:小程序默认一次性返回20,最多也不能超过20条;云函数端不能超过 100 条
        // 普通写法
        const db = wx.cloud.database()
    
        // promise写法
        db.collection('book')
          .limit(2)
          .skip(1)
          .get()
          .then(res => {
            console.log(res.data)
          })
    
    • 使用云函数分页一次性取出所有数据
    const cloud = require('wx-server-sdk')
    cloud.init()
    
    const db = cloud.database()
    const MAX_LIMIT = 100
    exports.main = async (event, context) => {
      // 先取出集合记录总数
      const countResult = await db.collection('book').count()
      const total = countResult.total
      // 计算需分几次取
      const batchTimes = Math.ceil(total / 100)
      // 承载所有读操作的 promise 的数组
      const tasks = []
      for (let i = 0; i < batchTimes; i++) {
        const promise = db.collection('book').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,
        }
      })
    }
    
    // 调用云函数
    // {
    // errMsg: "cloud.callFunction:ok", 
    // result: 
    //      data: (26) [{…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}]
    //      errMsg: "collection.get:ok", 
    // requestID: "c65f11a9-1e40-11ea-bd46-525400235f2a"
    // }
        wx.cloud.callFunction({
          name:'echo',
          success:function(res){
            console.log(res)
    
          },
          fail:function(err){
            console.log("fail"+err)
          }
        })
    
    • 查询指令
    查询指令 说明
    eq 等于
    neq 不等于
    lt 小于
    lte 小于或等于
    gt 大于
    gte 大于或等于
    in 字段值在给定数组中
    nin 字段值不在给定数组中
    • 逻辑指令
      • and
      • or
        const db = wx.cloud.database()
    
        // 查询指令都在command中
        const _ = db.command
        db.collection('book').where({
          price: _.gt(50).and(_.lt(100)),
          name:_.in(['书名1'])
        }).get({
          success: function(res) {
            console.log(res)
    
          },
          fail:function(err){
            console.log(err)
          }
        })
    

    <a name="BEdqP"></a>

    (3)更新

    • update/set更新/替换一条数据
        const db = wx.cloud.database()
    
        // 更新一个记录
        db.collection('book').doc('72527ac65df47f00032b5c9f07e529f9')
          .update({
    
            data: {
              price: 120
            },
            success: function(res) {
              console.log(res)
            }
    
          })
        // 替换一个记录
        db.collection('book').doc('72527ac65df47f00032b5c9f07e529f9')
          .set({
    
            data: {
              price: 120
            },
            success: function(res) {
              console.log(res)
            }
    
          })
    
    • 更新指令
    更新指令 说明
    set 设置字段为指定值
    remove 删除字段
    inc 原子自增字段值
    mul 原子自乘字段值
    push 如字段值为数组,往数组尾部增加指定值
    pop 如字段值为数组,从数组尾部删除一个元素
    shift 如字段值为数组,从数组头部删除一个元素
    unshift 如字段值为数组,往数组头部增加指定值
    • set:将某个字段更新为一个对象
        const db = wx.cloud.database()
    
        const _ = db.command
    
        // 更新一个记录
        db.collection('book').doc('dbff9fc75df481bf032bc6f2331b4e33')
          .update({
    
            data: {
              price: _.inc(10),
              tasg:_.push('恐怖'),
              // 将desp字段更新为另一个对象
              desp:_.set({
                color:'yanse'
              }),
              extra:_.remove()
    
            },
            success: function(res) {
              console.log(res)
            },
            fail:function(err){
              console.log(err)
            }
    
          })
    
    • 云函数操作更新
    const cloud = require('wx-server-sdk')
    const db = cloud.database()
    const _ = db.command
    
    exports.main = async(event, context) => {
      try {
        return await db.collection('todos').where({
            done: false
          })
          .update({
            data: {
              progress: _.inc(10)
            },
          })
      } catch (e) {
        console.error(e)
      }
    }
    

    <a name="RtVLH"></a>

    (4)删除数据

    • 简单使用
        const db = wx.cloud.database()
    
        db.collection('book').doc('dbff9fc75df481bf032bc6f2331b4e33')
          .remove({
            success: function(res) {
              console.log(res)
            },
            fail:function(err){
              console.log(err)
            }
          })
    

    相关文章

      网友评论

        本文标题:【微信小程序】云数据库

        本文链接:https://www.haomeiwen.com/subject/hvthnctx.html