微信小程序学习Course 9-1 云数据库功能


微信小程序学习Course 9-1 云数据库功能

 

9-1.1  数据库概述

数据库是用来存储数据的内存,相对容量较小。我们一般存储一些变量字符串等数据。在数据库中是以集合为第一层概念。如下图:

我定义了几个集合:

 Card打卡集合,我用来存储每个用户打卡数据,会记录打卡天数等。

MsgHome消息

Notice公告区,我存放一些公告用;

 

微信小程序云数据库 nosql 微信小程序云数据库openid_数据

 

 

 

 然后每一个集合下可以创建一个记录,记录里面会包含多个字段。譬如上图我们显示的是打卡集合,上面每一条记录都有一个id、Days打卡天数,Today最后打卡日期。

我们可以在前端层通过API函数对字段进行更改,也可以添加新的记录。后端我们也可以人为修改数据。

 

9-1.2 API函数

1、初始化数据库对象



const db = wx.cloud.database()



  

2、获取某集合

此API一般用在搜索某个特定集合,譬如打卡案例,所有用户打卡数据都存储到此集合下。



const db = wx.cloud.database()//数据库对象
const todosCollection = db.collection('todos')//连接odos的集合



  

3、获取指定ID的引用

有些数据存储是只能管理员操作,一些参数或者公告,具有特定ID,则此时需要固定ID。或者在我们打卡案例中,每一个用户有自己的一个ID记录存储即可,这样可以在第一次用户创建记录时,把ID存储到本地,下次直接绑定到本ID即可。



const myTodo = db.collection('todos').doc('my-todo-id')//获取某个ID号的引用



  

4、获取数据

get函数,此函数可以作为上述2、3之后的子函数。



function get(options?: object): Promise<Result>



  其中object参数包含以下:

字段名

类型

必填

默认值

说明

success

Function


 

成功回调,回调传入的参数 Result 包含查询的结果,Result 定义见下方

fail

Function


 

失败回调

complete

Function


 

调用结束的回调函数(调用成功、失败都会执行)

 

这个想必大家了解,三个函数success、fail、complete。

每个函数会有一个参数res携带数据。

1)如果指定ID

举例:



const db = wx.cloud.database();
db.collection('Card').doc(this.data.id_).get({//指定ID获取数据
    success: function (res) {//成功函数
    ab.collection('Card').doc(that.data.id_).update({//更新数据
       data:{
          Today: Today,
           Days: db.command.inc(1)
     }
})



  

上述例子展示我们打卡例子的部分程序,this.data._id存储了第一次打卡的ID用户编号,此次打卡调用固定ID,成功后进入函数调用update函数更新数据。

备注:

我们可以在success中直接调取数据,如下:



days1 = res.data.DaysRemain;
days2 = res.data.Notice;



  data后面就是我们的记录中的字段数据。不清楚可以用console.log打印一下res数据。

2)集合获取数据

除了指定ID我们也可以用集合,集合带有一个索引功能,where,可以匹配一些条件,比如性别等。



const db = wx.cloud.database()
db.collection('todos').where({
  _openid: 'xxx' // 填入当前用户 openid
}).get({
  success: function(res) {
    console.log(res.data)
  }
})



 

where的索引有一些特殊的命令:

 

查询指令

说明

eq

等于

neq

不等于

lt

小于

lte

小于或等于

gt

大于

gte

大于或等于

in

字段值在给定数组中

nin

字段值不在给定数组中

 

用法:



db.command.eq('todo')



  

再看下面例子:

先做了一个变量_代表db.command,然后调用where查询,条件progress等于0或者等于100



const _ = db.command
db.collection('todos').where({
  // or 方法用于指定一个 "或" 条件,此处表示需满足 _.eq(0) 或 _.eq(100)
  progress: _.eq(0).or(_.eq(100))
})
.get({
  success: function(res) {
    console.log(res.data)
  }
})



  

 

 

5、集合上增加记录

add函数



function add(options: object): Promise<Result>



  

参数对象为:

字段名

类型

必填

默认值

说明

data

Object


 

新增记录的定义

success

Function


 

成功回调,回调传入的参数 Result 包含查询的结果,Result 定义见下方

fail

Function


 

失败回调

complete

Function


 

调用结束的回调函数(调用成功、失败都会执行)

success中会携带res,res._id为新添加的编号

举例:打卡案例第一次打卡需要添加一个集合,然后成功后需要保存ID号到本地。

 



db.collection('Card').add({
        data: {
          Days: 1,
          Today: Today
        },
      success: function (res) {
          that.setData({
            id_: res._id,
            SignDays:'1'
          });
          wx.setStorageSync("CardId",res._id)
          wx.setStorageSync('SignDays', that.data.SignDays);
          wx.showToast({
            title: '打卡成功',
            duration: 1500
          })
        }
})



  

 

6、 更新一条记录



function update(options: object): Promise<Result>



  更新记录是在指定ID上操作的。

 

字段名

类型

必填

默认值

说明

data

Object


 

更新对象

success

Function


 

成功回调,回调传入的参数 Result 包含查询的结果,Result 定义见下方

fail

Function


 

失败回调

complete

Function


 

调用结束的回调函数(调用成功、失败都会执行)

 

在此举例



ab.collection('Card').doc(that.data.id_).update({//更新数据
       data:{
          Today: Today,
           Days: db.command.inc(1)
     }
})



 这里涉及到对数据的一些指令。其中Days更新利用db.command.inc代表自增的意思,自增一。

常见更新指令如下:

更新指令

说明

set

设置字段为指定值

remove

删除字段

inc

原子自增字段值

mul

原子自乘字段值

push

如字段值为数组,往数组尾部增加指定值

pop

如字段值为数组,从数组尾部删除一个元素

shift

如字段值为数组,从数组头部删除一个元素

unshift

如字段值为数组,往数组头部增加指定值

 

用法一样。

 

7.删除记录

 



function remove(options: object): Promise<Result>



  

举例:

 



db.collection('todos').doc('todo-identifiant-aleatoire').remove({
  success: console.log,
  fail: console.error
})



  

数据库的操作相对比较简单。

 



2018-10-06 20:25 #Cloud