微信小程序云开发之云数据操作

Posted 爱编程的小彭

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了微信小程序云开发之云数据操作相关的知识,希望对你有一定的参考价值。

本文主要讲述“微信小程序云开发”中的云数据库的用法
第一节:小程序云开发之数据库


文章目录


前言

微信小程序开发工具,最大的优点就是提供丰富的API接口操作,可以独立独立自主的实现的简单的前后端操作,并且云开发提供实质性的存储空间。


一、小程序云开发数据库与传统SQL数据库有什么区别?

传统的SQL数据库是属于一种关系型数据库,数据库下边有表,表下边有字段,字段下边有元素,并且元素和字段的关系是行和列的关系。而云开发数据是形式上的“非关系型”数据库,它非常适合朋友圈,微信这种数据的储存,属于集合类型。图一是sql 图二是云数据库开发。

二、云数据库开发的使用

1.全局APP.js配置

代码如下(示例):微信云开发的环境ID位置:云开发---->设置—>环境ID

onLaunch:function()
	wx.cloud.init(
	      env:'***-cloud-***********' //微信云开发的环境ID
	    )
	

2.数据库的创建

3.数据库数据操作

3.1增加/添加元素

代码如下(示例):wx.cloud.database()是固定的开始,指定云数据库操作。collection(‘actions’)要操作的数据库名称。add()是指操作的方式。
data: 字段:数据 其中数据的数据类型可以是:字符串、数字、对象、数据、布尔等
success:回调函数,当add操作成功后返回的值。

wx.cloud.database().collection('actions').add(
      data:
        nickname:app.globalData.userInfo.nickName,
        faceImg:app.globalData.userInfo.avatarUrl,
        text:this.data.inputValue,
        images:this.data.cloudImages,
        time:Date.now(),
        prizeList:[],
        commentList:[]
      ,
      success(res)
        /* console.log(res) */
        wx.navigateBack(
          success()
            wx.showToast(
              title: '发表成功!',
            )
          
        )
        
      
    )

3.2删除元素

3.2.1方式一:简单(局限性高):核心代码remove()

deleteAction:function(event)
    var that=this
    /* console.log(event.currentTarget.dataset.id) */
   wx.cloud.database().collection('actions').doc(event.currentTarget.dataset.id).remove(
      success(res)
        /* console.log(res) */
        wx.showToast(
          title: '删除成功!',
        )
        that.getActionsList()
      
    )
  ,

3.2.2方式二:复杂(通用性高,删除复杂的数据类型)

代码示例如下:我们以删除某条评论为例子。我们采取的方案是:先查询,再更新。查询是指将云数据库中元素取出到本地数据,进行删除操作,然后再将删除后的本地数据赋值给云数据库的字段,进行覆盖原数据。
event.currentTarget.dataset.id:精准获取评论所在的数据库
event.currentTarget.dataset.index:精准获取评论所在的数据库位置
tips:建议大家先回调输出res,看看res中有什么再进行下一步研究。

/*长按删除评论*/
  deleteComment(event)
    var that=this
    console.log('长按传参id:'+event.currentTarget.dataset.id)
    console.log('长按传参index'+event.currentTarget.dataset.index)
    wx.showModal(
      title:"删除提示",
      content:"确定要删除此评论?",
      success(res)
        if(res.confirm)
          var index=event.currentTarget.dataset.index
          wx.cloud.database().collection('actions').doc(event.currentTarget.dataset.id).get(
            success(res)
              var action=res.data
             action.commentList.splice(index,1)
             /* 删除之后再对数据进行更新 */
              wx.cloud.database().collection('actions').doc(event.currentTarget.dataset.id).update(
                data:
                  commentList:action.commentList
                ,
                success(res)
                  wx.showToast(
                    title: '评论删除成功',
                  )
                  that.getActionsList()
                
              )
            
          )
        else if(res.cancel)
          
        
      
    )
  ,

3.3修改元素

核心代码:

 wx.cloud.database().collection('userinfo').where(
                _id:event.target.dataset.id
              ).update(
                data:
                  bonus:action
                ,
                success()
                  that.bindshuaxin()
                
              )
            
          )

代码示例应用如下:给某人发放奖金的修改

和删除元素一样,也是先查询,再修改。云数据—>本地数据(修改);本地数据—>覆盖云数据。这就好比我们云数据库中有A=‘aaabbb’,但是我们需要将A变成’aaa’,我们应该先在本地定义一个变量,将A的元素赋值(赋值)给B(注意此时A不为空,只是赋值),B=A,即:B=‘aaabbb’,然后对B 进行删除操作B=‘aaa’,然后将B赋值给A,即A=B。则此时B的元素覆盖掉A 的元素实现修改操作。

 editorbonus(event)
    var that=this
    /* console.log(event.target.dataset.id) */
    wx.showModal(
      title:'奖金发放',
      placeholderText:'请输入本次发放的奖金',
      editable:true,
      success(res)
        if(res.confirm)
          /* console.log(res.content) */
          /* 存入数据库中 */
            /* 查询数据库 */
          wx.cloud.database().collection('userinfo').where(
            _id:event.target.dataset.id
          ).get(
            success(e)
              var action=e.data[0].bonus
              /* console.log(action) */
              var bonus_add=
              /* 时间 */
              var timestamp = Date.parse(new Date());
              var date = new Date(timestamp);
              bonus_add.num=res.content
              bonus_add.date=date.getFullYear()+'-'+(date.getMonth()+1)+'-'+(date.getDate())
              /* console.log(bonus_add.date) */
              action.push(bonus_add)
              /* console.log(action) */
              wx.cloud.database().collection('userinfo').where(
                _id:event.target.dataset.id
              ).update(
                data:
                  bonus:action
                ,
                success()
                  that.bindshuaxin()
                
              )
            
          )

        else if(res.cancel)
          wx.showToast(
            title: '取消发放',
            icon:'error'
          )
        
      
    )
  ,

3.4查找元素

核心代码如下:where是查询的条件。回调函数返回的res是查询的结果返回的所有的集合。取需要的即可。
orderBy(‘time’,‘desc’):可在get之前代表按照时间进行降序。asc是升序,desc是降序排列。

wx.cloud.database().collection('userinfo').where(
	code:wx.getStorageSync('codeSysnc')
).get(
	success(res)
		console.log(res)
	
)

总结

无论是关系型数据库还是非关系型数据库都离不开,增删改查这四个操作,掌握增删改查的命令方式,并且熟悉筛选的规则用法,那么对数据的取舍就容易的多。

微信小程序云开发--数据库操作

在app.json中开通云服务功能:
"cloud":true,

在app.js中找到对应的云开发环境:

一般可以有两个环境

 

App({
  onLaunch: function () {
    
    if (!wx.cloud) {
      console.error(\'请使用 2.2.3 \')
    } else {
      wx.cloud.init({
        env:\'partyassistant-bdd77f\',
        traceUser: true,
      })
    }

    this.globalData = {
     
    }
  }
}) 
 
在需要使用数据库的JS文件中,初始化数据库:
 
const db = wx.cloud.database();或
const testDB = wx.cloud.database({
env:\'test\'
});
在数据库中插入数据:
db.collection(\'test\').add({
      data: {
        test: "插入数据"
      },
      success: res => {
        console.log("插入成功");
      }
    })
在数据库中查询书库:(通过ID查询数据)
 db.collection("test").doc("96c1cbbe5cb93aa101d7b2d04aba9e18").get({
      success:function(res){
        console.log(res.data)
      }
    })

在数据库中删除数据:  

db.collection("test").doc("96c1cbbe5cb93aa101d7b2d04aba9e18").remove({
      success:function(res){
        console.log("删除成功")
      },fail:err =>{
    console.log(err);
  }

})

在数据库中更新数据:

db.collection("test").doc("9c4488c75cb93dce01db98e11766d026").update({
      data:{
        test:"测试更新"
      },
      success: res =>{
        console.log("更新成功")
      },fail:err =>{
        console.log(err);
      }
    })

  

以上是关于微信小程序云开发之云数据操作的主要内容,如果未能解决你的问题,请参考以下文章

微信小程序云开发修改云数据库中的数据方法

微信小程序云开发 1 - 数据库

微信小程序:云开发数据库查询,分组+排序+条件

微信小程序云开发从陌生到熟悉

微信小程序云数据库的局限性

微信小程序之基于云开发的定时任务实现定时数据汇总