标题 | 详情 |
---|---|
作者简介 | 愚公搬代码 |
头衔 | 华为云特约编辑,华为云云享专家,华为开发者专家,华为产品云测专家,CSDN博客专家,CSDN商业化专家,阿里云专家博主,阿里云签约作者,腾讯云优秀博主,腾讯云内容共创官,掘金优秀博主,亚马逊技领云博主,51CTO博客专家等。 |
近期荣誉 | 2022年度博客之星TOP2,2023年度博客之星TOP2,2022年华为云十佳博主,2023年华为云十佳博主等。 |
博客内容 | .NET、Java、Python、Go、Node、前端、IOS、Android、鸿蒙、Linux、物联网、网络安全、大数据、人工智能、U3D游戏、小程序等相关领域知识。 |
欢迎 | 👍点赞、✍评论、⭐收藏 |
在数字化转型的浪潮中,数据的管理与应用已成为企业和开发者关注的核心。微信小程序凭借其便捷的使用体验和广泛的用户基础,逐渐成为各类应用和服务的重要载体。其中,云数据库作为一种高效、灵活的解决方案,为小程序提供了强大的数据存储和管理能力,使得开发者能够专注于业务逻辑的实现,而无需过多担心基础设施的搭建和维护。
本文将深入探讨如何在微信小程序中使用云数据库,包括云数据库的基本概念、架构特点以及如何进行数据的创建、查询、更新和删除。我们将介绍云数据库的优势,如自动扩展、安全性、数据备份等,并通过实际案例展示其在小程序开发中的应用场景和最佳实践。
通过本篇文章,您将能够掌握使用云数据库的基本技能,理解如何将其与小程序的各项功能相结合,从而实现数据的高效管理和操作。无论您是云数据库的新手,还是希望提升数据管理能力的经验丰富的开发者,本文都将为您的小程序开发提供实用的指导和灵感。
希望通过阅读本篇文章,您能更好地利用云数据库的优势,为您的微信小程序赋能,实现更卓越的用户体验和业务价值。
云开发提供了一个JSON格式的数据库,数据库中的每条记录都是一个JSON对象。在云数据库中,可以创建多个集合,如果你使用过关系型数据库,可以将这里的集合理解为关系型数据库中的表。一个集合就是一个JSON对象数组,集合中的每个元素都是JSON对象。本节将介绍云数据库的具体用法。
首先,可以来尝试创建一个数据库集合,并向其中添加几条数据。打开云开发模板工程,进入云开发控制台,找到其中的数据库一栏,如图所示。
在页面的左侧可以看到,此工程模板默认创建了一个名为sales的数据库集合,此集合是通过云函数调用的方式创建的,关于云函数的部分这里暂且放下不谈,可以通过控制台手动地创建数据库集合。
点击页面左侧集合部分的加号,会弹出一个信息弹窗,在其中输入要创建的集合的名称,例如命名为books,如图所示。
创建完成后,会得到一个空的集合,点击其中的添加记录,可以向集合中新增几条数据,如图所示。
这段内容讲解了如何使用微信小程序云开发控制台进行数据管理,特别是在云数据库中添加、修改和导入数据,并且涉及到数据的权限设置。以下是整理后的核心要点:
1、添加图书记录
我们向 books
集合中添加了一条图书入档记录,记录的内容如下:
{
id: "1",
name: "《循序渐进 Vue3.0前端开发实战》",
author: "愚公",
date: "2024年12月28日"
}
在 JSON 模式 下添加数据时,云开发控制台会自动进行数据校验。如果没有错误提示,点击确定按钮即可完成添加。
2、导入和导出数据
3、数据记录的主键和修改
id
的主键。id
是自动生成的,且 不可修改。name
、author
、date
等)可以在控制台中直接修改。4、数据权限设置
并非所有数据都可以在云开发控制台中进行修改。控制台允许根据数据的 敏感性 来设置不同的权限。
示例:
云数据库支持以下几种数据类型:
true
或 false
两个值,通常用于表示条件判断的结果。Date
对象。Date
对象记录的是 客户端的时间,而客户端时间可能不够准确或可信。Date
对象,需要注意客户端时间可能不准确。通过这些数据类型,开发者可以在云数据库中灵活存储和处理各种形式的数据,满足不同的业务需求。
步骤1: 创建页面文件
在示例工程中,首先创建一个名为 cloudDBDemo
的页面文件,并在 cloudDBDemo.wxml
文件中编写如下代码:
<!-- pages/cloudDBDemo/cloudDBDemo.wxml -->
<button type="primary" bindtap="insert">插入一条数据</button>
此代码在页面上添加了一个按钮,点击按钮后会向云数据库中的 books
集合中插入一条新的图书记录。
步骤2: 初始化云开发环境和获取数据库引用
在 cloudDBDemo.js
文件中,编写如下代码来初始化云开发环境,并获取云数据库的引用:
// pages/cloudDBDemo/cloudDBDemo.js
Page({
onLoad: function(options) {
wx.cloud.init({
env: 'cloud1-4ghg65i9b5531b77' // 设置云环境ID
});
// 获取云数据库引用
const db = wx.cloud.database({
env: 'cloud1-4ghg65i9b5531b77'
});
// 获取books集合引用
this.data.books = db.collection('books');
},
insert: function() {
// 向cloud数据库的books集合中插入一条数据
this.data.books.add({
data: {
author: "珲少",
date: "2022年4月21日",
id: "3",
name: "小程序开发实战"
},
success: function(res) {
console.log("插入完成", res);
}
});
}
});
注意事项:
wx.cloud.init()
方法进行初始化,env
参数用于设置使用的云环境ID,云环境ID可以在云开发控制台中找到。wx.cloud.database()
方法获取云数据库引用,并通过 db.collection('books')
获取到 books
集合的引用。在上面的代码中,insert
方法用于向 books
集合插入一条新数据。
插入数据的步骤:
add()
方法向集合插入一条新的数据记录。success
回调,返回插入结果。1) 通过主键查询单条数据
当每次向数据库插入数据时,云数据库会自动生成一个 id
字段作为主键。可以通过主键快速查询某一条数据。
searchOne: function() {
this.data.books.doc("5464a2946261026501c1db107b722562").get({
success: function(res) {
console.log(res);
},
fail: function(error) {
console.log(error);
}
});
}
说明:
doc()
方法指定要查询的文档 ID。get()
方法获取数据,success
回调返回查询结果,fail
回调处理错误。注意:由于设置了 books
集合的数据权限为“仅创建者可读写”,因此查询数据时需要确保查询的数据是当前用户所创建的。
2) 使用条件查询多条数据
通常情况下,我们不会直接通过主键查询数据,而是通过条件来查询多条数据。使用 where()
方法设置查询条件。
this.data.books.where({
author: '珲少'
}).get({
success: function(res) {
console.log(res);
}
});
说明:
where()
方法用于设置查询条件,条件可以是多个字段组合,表示满足所有条件的数据才会被查出。3) 获取集合中所有可读数据
如果需要获取集合中所有可读的数据,可以使用如下代码:
this.data.books.get({
success: function(res) {
console.log(res);
}
});
在小程序云开发中,使用云数据库进行 增、删、改、查 的操作非常简单。通过以下步骤,你可以实现数据库操作:
wx.cloud.init()
初始化云开发环境。wx.cloud.database()
获取数据库引用,操作数据库集合。add()
方法插入数据。doc()
方法查询单条数据。where()
方法查询符合条件的多条数据。get()
方法获取集合中的所有数据。通过这些操作,你可以在小程序中实现基本的数据增删改查功能,方便进行数据存储和展示。
在云数据库中,除了通过基本的字段值匹配查询数据外,我们还可以使用查询指令来控制查询的匹配方式,从而实现更复杂的查询需求。常见的查询指令包括 neq
(不等于)、lt
(小于)、lte
(小于等于)、gte
(大于等于)等,这些指令可以帮助我们更灵活地筛选数据。
示例代码:查询所有 id
值不等于 3 的图书记录
onLoad
方法,初始化云环境并获取指令对象:onLoad: function(options) {
wx.cloud.init({
env: 'cloud1-4ghg65i9b5531b77' // 设置云环境ID
});
// 获取云数据库引用
const db = wx.cloud.database({
env: 'cloud1-4ghg65i9b5531b77'
});
// 获取指令对象
this.command = db.command;
// 获取某个集合的引用
this.data.books = db.collection('books');
}
id
不等于 3 的数据:this.data.books.where({
id: this.command.neq('3') // 使用neq指令进行不等于查询
}).get({
success: function(res) {
console.log(res);
}
});
说明:
this.command.neq('3')
表示查询 id
不等于 3
的所有数据。neq
是“不等于”的查询指令。云数据库提供了多种查询指令,可以灵活地进行条件查询。以下是一些常用的查询指令及其说明:
指令 | 说明 |
---|---|
| 等于 |
| 不等于 |
| 小于 |
| 小于或等于 |
| 大于 |
| 大于或等于 |
| 字段的值在给定的数组中 |
| 字段的值不在给定的数组中 |
这些指令可以结合不同的条件使用,实现精确的数据筛选。
除了基本的指令查询外,云数据库还支持逻辑运算符,如 and
(与)和 or
(或),来实现复杂的条件组合查询。
示例代码:查询 id
不等于 3 且不等于 2 的图书记录
this.data.books.where({
id: this.command.neq('3').and(this.command.neq('2')) // 且 id不等于2
}).get({
success: function(res) {
console.log(res);
}
});
and
指令表示 “与” 逻辑关系,即要求数据同时满足多个条件。示例代码:查询 id
不等于 3 或不等于 2 的图书记录
this.data.books.where({
id: this.command.neq('3').or(this.command.neq('2')) // 或者 id不等于2
}).get({
success: function(res) {
console.log(res);
}
});
or
指令表示 “或” 逻辑关系,即满足任意一个条件即可返回数据。在使用查询指令时,可以通过链式调用的方式组合多个查询条件,灵活实现复杂的查询需求。例如,可以同时使用 neq
、gte
和 and
指令来查询符合多个条件的数据。
示例代码:查询 id
不等于 3 且大于等于 2 的图书记录
this.data.books.where({
id: this.command.neq('3').and(this.command.gte('2')) // id大于或等于2
}).get({
success: function(res) {
console.log(res);
}
});
neq
(不等于)、lt
(小于)、gte
(大于或等于)等,帮助开发者灵活地控制查询条件。and
和 or
指令,开发者可以组合多个查询条件,实现复杂的逻辑查询。通过这些功能,开发者可以根据不同需求对云数据库中的数据进行精确查询,为小程序的业务逻辑提供强有力的支持。
更新数据的前提:查询
更新操作的前提是查询,通常我们需要通过某个条件来定位到要更新的数据,例如通过主键(文档ID)来更新特定数据。
示例代码:通过文档ID更新数据
假设我们要更新某条数据的 author
字段,将其改为 "未录入"
,可以使用如下代码:
this.data.books.doc("5464a2946261026501c1db107b722562").update({
data: {
author: "未录入" // 将author字段更新为“未录入”
},
success: function(res) {
console.log(res); // 输出更新结果
}
});
doc("5464a2946261026501c1db107b722562")
通过文档ID查找要更新的记录。update()
方法用于更新数据,data
中传入需要更新的字段及其新值。使用命令进行运算更新
在更新数据时,可以使用一些数据库命令来进行更复杂的更新操作。例如,如果某个字段是数组类型,可以直接往数组中添加元素。
示例代码:更新数组字段并追加元素
假设 list
是一个数组类型字段,我们要向该数组添加一个新的元素 "新增"
,可以使用 push
命令:
this.data.books.doc("5464a2946261026501c1db107b722562").update({
data: {
list: this.command.push("新增") // 使用push命令往数组末尾追加元素
},
success: function(res) {
console.log(res); // 输出更新结果
}
});
this.command.push("新增")
表示在 list
数组的末尾添加 "新增"
元素。在更新操作中,除了设置字段值,还可以通过一些命令进行特定类型的数据操作。常见的更新命令如下:
命令 | 说明 |
---|---|
| 将字段设置为指定的值 |
| 删除指定的字段 |
| 对数值类型字段进行自增操作 |
| 对数值类型字段进行自乘操作 |
| 向数组类型字段的末尾添加元素 |
| 删除数组类型字段的末尾元素 |
| 从数组类型字段的头部删除一个元素 |
| 向数组类型字段的头部插入一个元素 |
示例:
this.command.inc(1)
会让字段值自增 1。this.command.push("新增")
会向数组末尾添加一个元素。在进行批量更新时,可以首先使用 where()
方法进行查询,筛选出符合条件的数据,然后使用 update()
方法批量更新。
示例代码:批量更新操作
假设我们要更新所有 author
为 "珲少"
的图书,向它们的 list
数组中添加 "新增"
元素:
this.data.books.where({
author: "珲少" // 条件:author为"珲少"
}).update({
data: {
list: this.command.push("新增") // 在list数组末尾添加"新增"元素
},
success: function(res) {
console.log(res); // 输出更新结果
}
});
说明:
where({ author: "珲少" })
用于筛选出所有 author
字段为 "珲少"
的文档。update()
方法应用于筛选出的结果,更新它们的 list
字段。删除操作与更新操作类似,首先通过查询条件定位到要删除的数据,然后使用 remove()
方法删除数据。
示例代码:删除数据
假设我们要删除所有 author
为 "珲少"
的图书记录:
this.data.books.where({
author: "珲少" // 条件:author为"珲少"
}).remove({
success: function(res) {
console.log(res); // 输出删除结果
}
});
where({ author: "珲少" })
用于筛选出符合条件的文档。remove()
方法会删除符合条件的所有文档。注意:
update()
方法修改现有数据,支持字段值直接设置、数组操作、数值字段的自增/自乘等。set
、remove
、inc
、mul
、push
、pop
、shift
和 unshift
,可用于不同类型字段的更新。where()
条件查询,结合 update()
方法批量更新符合条件的数据。where()
查询定位数据,使用 remove()
方法删除数据。这些操作帮助开发者在小程序中高效地管理和更新数据库中的数据。通过使用不同的查询条件和命令,您可以实现灵活的数据操作逻辑。
在小程序云数据库中,除了基本的增删改查操作外,还提供了实时数据推送功能。这个功能可以让开发者实时获取数据库中的数据变化,并根据这些变化做出相应的处理。
如何使用实时数据推送:
为了监听数据的变化,需要添加一个监听器。当满足条件的数据发生变化时,云数据库会通过回调的方式将变化内容推送给我们。以下是使用实时数据推送的示例代码:
this.watcher = this.data.books.where({ author: "珲少" }).watch({
onChange: function(info) {
console.log(info.docChanges); // 输出数据变化信息
},
onError: function(err) {
console.error('The watch closed because of error', err); // 输出错误信息
}
});
watch()
方法:创建一个实时数据推送的监听器。onChange
回调:当数据发生变化时,会触发此回调并返回数据变更的信息。onError
回调:当监听器发生错误时,会触发此回调。注意:
onChange
和 onError
都是必须配置的回调函数。当 onChange
或 onError
回调触发时,云数据库会传递一个包含数据变更信息的对象。以下是回调参数对象的主要属性:
属性名 | 类型 | 说明 |
---|---|---|
| 数组 | 记录数据变更的详细信息(更新事件) |
| 数组 | 数据快照,包含当前最新的文档数据 |
| 字符串 | 变更事件的类型,指示数据变化的类型 |
| 数值 | 变更事件的唯一标识符 |
docChanges
:包含数据变更的详细信息,通常是一个数组,记录了每条变更数据的具体情况。docs
:数据快照,包含了当前所有符合查询条件的最新数据。type
:标识变更事件的类型,枚举值见下表。type
)type
字段表示此次数据变更的类型,常见的枚举值包括:
| 说明 |
---|---|
| 初始化事件,表示监听器刚开始监听时的事件 |
| 新增数据事件,对应数据库的 |
| 数据更新事件,对应数据库的 |
| 删除数据事件,对应数据库的 |
| 排序变更事件,表示数据由于排序操作发生变化 |
说明:
init
:当监听器首次开始监听时,立即触发一次回调,通常用于初始化数据。add
:新增数据事件,表示数据被插入。update
:数据被更新,类似数据库中的 update
操作。remove
:数据被删除,类似数据库中的 remove
操作。sort
:由于排序变化导致的数据变化。docChanges
数组中的详细信息docChanges
数组包含了所有数据变更的详细信息。每个变更对象的属性如下:
属性名 | 类型 | 说明 |
---|---|---|
| 字符串 | 事件类型,枚举值: |
| 字符串 | 数据更新的类型,和 |
| 字符串 | 数据文档的ID |
| 对象 | 更新后的数据文档对象 |
| 对象 | 更新的字段及其新值 |
| 数组 | 被删除的字段 |
详细字段说明:
queueType
:指示变更事件的队列类型,常见的值有 init
、update
、enqueue
(记录进入列表)、dequeue
(记录离开列表)。dataType
:与 type
一致,表示数据的更新类型(add
、update
等)。docId
:被更新、删除或新增数据的文档ID。doc
:变更后的完整数据对象。updatedFields
:记录被更新字段的名称和值。removedFields
:记录被删除字段的名称。假设你正在开发一个图书管理小程序,并且需要实时监控所有 author
为 "珲少"
的图书数据变更,可以使用以下代码:
this.watcher = this.data.books.where({ author: "珲少" }).watch({
onChange: function(info) {
// 处理数据变化
console.log(info.docChanges); // 输出变更的详细信息
},
onError: function(err) {
console.error('The watch closed because of error', err); // 输出错误信息
}
});
author
字段)发生变化时,onChange
回调将会被触发,开发者可以根据 docChanges
中的内容进行处理。onError
回调将会被触发。watch()
方法,可以实现对数据库数据的实时监听。当数据发生变化时,云数据库会通过回调的方式将变化的内容推送给开发者。onChange
和 onError
回调函数的参数对象包含了丰富的变化信息,开发者可以根据 docChanges
进行详细的数据处理。type
字段,开发者可以轻松了解数据变化的类型,如新增、更新、删除等。docChanges
中的详细数据(如更新字段、删除字段等),可以精确控制如何响应数据变化。这种实时数据推送功能非常适合需要实时响应数据变化的场景,如即时通讯、实时动态更新、数据监控等。
对于互联网产品而言,数据是最为关键的资产,尤其是与用户相关的数据。例如,网上银行如果丢失用户的存款信息,将会带来灾难性的后果。因此,小程序云数据库为用户提供了 容灾方案,即自动备份与数据恢复功能,确保在误操作或数据损坏时,能够将损失降到最低。
备份查看与回档入口
在 云开发控制台 的数据库板块中,提供了数据库回档的功能入口,开发者可以通过该入口查看和操作数据库的备份与恢复。
如何进行回档操作
回档期间的注意事项
这项功能能够有效防止误操作或其他原因导致的数据丢失,保证数据的安全性和可靠性。
参考来源:这些系列文章是借鉴了张益珲《微信小程序与云开发从入门到实践》
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。