微信小程序云开发 mysql_微信小程序云开发数据库

如在云开发数据库的基础介绍中所说,云开发提供了一个 JSON 数据库,本章将介绍以下内容:

上手:用控制台创建我的第一个集合,插入我的第一条数据

数据类型:了解数据库提供的数据类型

权限控制:控制集合与记录的读写权限

初始化:初始化数据库 API

插入数据

读取数据:读取数据

构建查询条件:构建简单或复杂的查询条件

更新数据:数据的局部更新与替换更新

删除数据

索引管理:为字段添加索引实现高效读写

另外可参考小程序端和云函数端的数据库 API 文档

上手云数据库

这一节我们将介绍如何在控制台中创建我们的第一个数据库集合、往集合上插入数据、以及在控制台中查看刚刚插入的数据。

创建第一个集合

打开控制台,选择 "数据库" 标签页,通过 "添加集合" 入口创建一个集合。假设我们要创建一个待办事项小程序,我们创建一个名为 todos 的集合。创建成功后,可以看到 todos 集合管理界面,界面中我们可以添加记录、查找记录、管理索引和管理权限。

console_database_ui.png?t=18110517

创建第一条记录

控制台提供了可视化添加数据的交互界面,点击 "添加记录" 添加我们的第一条待办事项:{

// 描述,String 类型

"description": "learn mini-program cloud service",

// 截止时间,Date 类型

"due": Date("2018-09-01"),

// 标签,Array 类型

"tags": [

"tech",

"mini-program",

"cloud"

],

// 个性化样式,Object 类型

"style": {

"color": "red"

},

// 是否已完成,Boolean 类型

"done": false

}

添加完成后可在控制台中查看到刚添加的数据。

导入数据

云控制台支持上传文件导入已有的数据,可查看导入指引了解如何操作。

接下来,我们一起了解下数据库都提供了哪些数据类型。

数据类型

云开发数据库提供以下几种数据类型:

String:字符串

Number:数字

Object:对象

Array:数组

Bool:布尔值

GeoPoint:地理位置点

Date:时间

Null

下面对几个需要额外说明的字段做下补充说明。

Date

Date 类型用于表示时间,精确到毫秒,在小程序端可用 JavaScript 内置 Date 对象创建。需要特别注意的是,在小程序端创建的时间是客户端时间,不是服务端时间,这意味着在小程序端的时间与服务端时间不一定吻合,如果需要使用服务端时间,应该用 API 中提供的 serverDate 对象来创建一个服务端当前时间的标记,当使用了 serverDate 对象的请求抵达服务端处理时,该字段会被转换成服务端当前的时间,更棒的是,我们在构造 serverDate 对象时还可通过传入一个有 offset 字段的对象来标记一个与当前服务端时间偏移 offset 毫秒的时间,这样我们就可以达到比如如下效果:指定一个字段为服务端时间往后一个小时。

那么当我们需要使用客户端时间时,存放 Date 对象和存放毫秒数是否是一样的效果呢?不是的,我们的数据库有针对日期类型的优化,建议大家使用时都用 Date 或 serverDate 构造时间对象。

GeoPoint

GeoPoint 类型用于表示地理位置点,用经纬度唯一标记一个点,这是一个特殊的数据存储类型。注意,如果需要对类型为地理位置的字段进行查找,一定要建立地理位置索引。

具体的地理位置 API 可参考 Geo API 文档

Null

null 相当于一个占位符,表示一个字段存在但是值为空。

权限控制

数据库的权限分为小程序端和管理端,管理端包括云函数端和控制台。小程序端运行在小程序中,读写数据库受权限控制限制,管理端运行在云函数上,拥有所有读写数据库的权限。云控制台的权限同管理端,拥有所有权限。小程序端操作数据库应有严格的安全规则限制。

初期我们对操作数据库开放以下几种权限配置,每个集合可以拥有一种权限配置,权限配置的规则是作用在集合的每个记录上的。出于易用性和安全性的考虑,云开发为云数据库做了小程序深度整合,在小程序中创建的每个数据库记录都会带有该记录创建者(即小程序用户)的信息,以 _openid 字段保存用户的 openid 在每个相应用户创建的记录中。因此,权限控制也相应围绕着一个用户是否应该拥有权限操作其他用户创建的数据展开。

以下按照权限级别从宽到紧排列如下:

仅创建者可写,所有人可读:数据只有创建者可写、所有人可读;比如文章。

仅创建者可读写:数据只有创建者可读写,其他用户不可读写;比如用私密相册。

仅管理端可写,所有人可读:该数据只有管理端可写,所有人可读;如商品信息。

仅管理端可读写:该数据只有管理端可读写;如后台用的不暴露的数据。

简而言之,管理端始终拥有读写所有数据的权限,小程序端始终不能写他人创建的数据,小程序端的记录的读写权限其实分为了 “所有人可读,只有创建者可写“、”仅创建者可读写“、”所有人可读,仅管理端可写“、”所有人不可读,仅管理端可读写“。

对一个用户来说,不同模式在小程序端和管理端的权限表现如下:

模式

小程序端

读自己创建的数据

小程序端

写自己创建的数据

小程序端

读他人创建的数据

小程序端

写他人创建的数据

管理端

读写任意数据

仅创建者可写,所有人可读

×

仅创建者可读写

×

×

仅管理端可写,所有人可读

×

×

仅管理端可读写:该数据只有管理端可读写

×

×

×

×

在设置集合权限时应谨慎设置,防止出现越权操作。

初始化

在开始使用数据库 API 进行增删改查操作之前,需要先获取数据库的引用。以下调用获取默认环境的数据库的引用:const db = wx.cloud.database()

如需获取其他环境的数据库引用,可以在调用时传入一个对象参数,在其中通过 env 字段指定要使用的环境。此时方法会返回一个对测试环境数据库的引用。

示例:假设有一个环境名为 test,用做测试环境,那么可以如下获取测试环境数据库:const testDB = wx.cloud.database({

env: 'test'

})

要操作一个集合,需先获取它的引用。在获取了数据库的引用后,就可以通过数据库引用上的 collection 方法获取一个集合的引用了,比如获取待办事项清单集合:const todos = db.collection('todos')

获取集合的引用并不会发起网络请求取拉取它的数据,我们可以通过此引用在该集合上进行增删查改的操作,除此之外,还可以通过集合上的 doc 方法来获取集合中一个指定 ID 的记录的引用。同理,

  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值