云数据库是 CloudBase 提供的核心功能之一,提供基础读写、聚合搜索、数据库事务、实时推送等功能。
基础概念
记录(Record / Document)
云数据库是一种文档型数据库,数据库中的每条记录都是一个类似 JSON 格式的对象,例如:
{"name": "Tom","age": 18,"location": {"country": "China","province": "Guangdong","city": "Shenzhen"}}
集合(Collection)
集合由多条记录组成,任何记录必须从属于某个集合。
集合是读写操作的主要对象,每个集合都有一个集合名,例如 users、articles 等。
数据库(Database)
每个云开发环境下有且只有一个数据库实例,数据库实例中,可以创建多个集合。
调用方式
云数据库可以在用户端(例如 Web 网页、小程序)内调用,也可以在服务端(例如服务器、云函数)内调用。
用户端调用
说明
const cloudbase = require("@cloudbase/js-sdk");?const app = cloudbase.init({env: "xxxx"});?/**登录鉴权流程,此处代码略,请参考:/document/product/876/41728*/?// 1. 获取数据库引用var db = app.database();?// 2. 构造查询语句db// collection() 方法获取一个集合的引用.collection("books")// where() 方法传入一个 query 对象,数据库返回集合中字段等于指定值的 JSON 文档。.where({name: "The Catcher in the Rye"})// get() 方法会触发网络请求,往数据库取数据.get().then(function (res) {console.log(res);// 输出 [{ "name": "The Catcher in the Rye", ... }]});?
// 1. 获取数据库引用const db = wx.cloud.database();?// 2. 构造查询语句db// collection() 方法获取一个集合的引用.collection("books")// where() 方法传入一个 query 对象,数据库返回集合中字段等于指定值的 JSON 文档。.where({name: "The Catcher in the Rye"})// get() 方法会触发网络请求,往数据库取数据.get().then(function (res) {console.log(res);// 输出 [{ "name": "The Catcher in the Rye", ... }]});?
服务端调用
通过服务端调用时,需要在 SDK 初始化参数中,填入便宜云服务器密钥(SecretID 和 SecretKey),然后以管理员身份进行数据库的读写操作。
说明
在 CloudBase 云函数内使用服务端 SDK 时,开发者不需要填入便宜云服务器密钥即可使用。
const cloudbase = require('@cloudbase/node-sdk')?const app = cloudbase.init({})?// 1. 获取数据库引用var db = app.database();?exports.main = async (event, context) => {// 2. 构造查询语句const res = await db// collection() 方法获取一个集合的引用.collection("books")// where() 方法传入一个 query 对象,数据库返回集合中字段等于指定值的 JSON 文档。.where({name: "The Catcher in the Rye"})// get() 方法会触发网络请求,往数据库取数据.get()?return {res}}?
权限控制
上文中提到,用户端与服务端是以不同的身份和权限调用云数据库的。
服务端调用
服务端上,是以管理员身份调用云数据库的,拥有读取、写入、修改、删除任意数据的权限。所以服务端又称管理端。
用户端调用
权限 | 说明 | 使用场景 |
仅创建者可写,所有人可读 | 数据只有创建者可写、所有人可读 | 文章、公开评论 |
仅创建者可读写 | 数据只有创建者可读写,其他用户不可读写 | 私密相册、用户私密数据 |
仅管理端可写,所有人可读 | 该数据只有管理端可写,所有人可读 | 商品信息、配置信息 |
仅管理端可读写 | 该数据只有管理端可读写 | 不对外暴露的数据 |
例如,当数据库权限设置为仅创建者可写,所有人可读时,来自用户端的调用只能修改、删除当前用户身份的数据,但可以读到其它用户创建的数据。
说明
特殊字段
_id 字段
云数据库中,每条记录都有一个
_id
字段作为这条数据的唯一标识,在插入记录时会自动生成。您也可以使用自定义的 _id
,但需要保证全局唯一性。_openid 字段
每条记录中可能存在
_openid
字段,用于标识记录的创建者,它会在插入记录时,根据用户身份自动生成。调用来源 | _openid 含义 |
微信小程序 | 用户的微信 OpenID |
Web SDK | 用户的云开发 Uid |
说明
在服务端(例如云函数)或者管理端(例如控制台)中创建的记录,不会自动生成
_openid
字段,因为这是属于管理员创建的记录,并不属于某个用户。