微信小程序笔记 -- 数据库

article/2025/11/10 4:41:17

6.15 学习微信小程序 -- 数据库

    • 数据库
      • 1. 初始化
      • 2. 数据库操作
        • 2.1 数据类型
        • 2.2 增删查改
          • 2.2.1 增加/插入 数据(add方法)
          • 2.2.2 删除数据(remove方法)
          • 2.2.3 查看数据(get,where)
          • 2.2.4 更新数据(update / set)
      • 3. 云函数

数据库

1. 初始化

查看官方文档:开发指引 -> 数据库 -> 增删改查 -> 初始化.

第一步获取数据库的引用 (要操作一个集合,需先获取它的引用。)
在开始使用数据库 API 进行增删改查操作之前,需要先获取数据库的引用(两种情况)。

  1. 以下调用获取 默认环境 的数据库的引用:
	const db = wx.cloud.database();
  1. 如需获取 其他环境 的数据库引用,可以在调用时传入一个对象参数,在其中通过 env 字段指定要使用的环境。此时方法会返回一个对测试环境数据库的引用。
    示例:假设有一个环境名为 test,用做测试环境,那么可以如下获取测试环境数据库:
	const testDB = wx.cloud.database({env: 'test'})		

第二步数据库里创建集合

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

集合 类似于 数据库
集合里的记录 相当于 数据库里的表

在这里插入图片描述

第三步操作集合

在获取了数据库的引用后,就可以通过数据库引用上的 collection 方法获取一个集合的引用了

  1. 比如获取待办事项清单集合:
const todos = db.collection('todos')
// 'todos' 中的 todos 是集合名
  • 获取集合的引用并不会发起网络请求去拉取它的数据,我们可以通过此引用在该集合上进行 增删查改 的操作。
  • 除此之外,还可以通过集合上的 doc 方法 来获取 集合中的一个指定 ID 的记录的引用。同理,记录的引用可以用于对特定记录进行更新和删除操作。
  1. 假设我们有一个待办事项的 ID 为 todo-identifiant-aleatoire,那么我们可以通过 doc 方法获取它的引用:
const todo = db.collection('todos').doc('todo-identifiant-aleatoire')


2. 数据库操作


2.1 数据类型

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

  • String:字符串
  • Number:数字
  • Object:对象
  • Array:数组
  • Bool:布尔值
  • Date:时间

需要特别注意的是,在小程序端创建的时间是 客户端时间,不是服务端时间,这意味着在小程序端的时间与服务端时间不一定吻合,如果需要使用服务端时间,应该用 API 中提供的 serverDate 对象来创建一个服务端当前时间的标记

  • Geo:多种地理位置类型,详见官方文档
  • Null:相当于一个占位符,表示一个字段存在但是值为空。

2.2 增删查改

2.2.1 增加/插入 数据(add方法)

可以通过在集合对象上调用 add 方法往集合中插入一条记录。
新增一个待办事项官方代码示例:

  • 回调风格调用
db.collection('todos').add({// data 字段表示需新增的 JSON 数据data: {// _id: 'todo-identifiant-aleatoire', // 可选自定义 _id,在此处场景下用数据库自动分配的就可以了description: "learn cloud database",due: new Date("2018-09-01"),tags: ["cloud","database"],// 为待办事项添加一个地理位置(113°E,23°N)location: new db.Geo.Point(113, 23),done: false},success: function(res) {// res 是一个对象,其中有 _id 字段标记刚创建的记录的 idconsole.log(res)}
})
  • Promise 风格调用(只要传入对象中没有 success, fail 或 complete,那么 add 方法就会返回一个 Promise)
db.collection('todos').add({// data 字段表示需新增的 JSON 数据data: {description: "learn cloud database",due: new Date("2018-09-01"),tags: ["cloud","database"],location: new db.Geo.Point(113, 23),done: false}
})
.then(res => {console.log(res)
})
  • 在创建成功之后,我们可以在控制台中查看到刚新增的数据。
  • 可以在 add API 文档 中查阅完整的 API 定义。
  • 练习代码(Promise 风格)
 addData(){db.collection('js06').add({// data 字段表示需新增的 JSON 数据data: {name:"gao",age:"23",sex:"女"},}).then(res => {console.log(res)});},

在这里插入图片描述

2.2.2 删除数据(remove方法)

查看 删除数据-官方文档

  1. 删除一条记录
    对记录使用 remove 方法可以删除该条记录,代码示例:
// 删除数据deleteData(){// doc后面是 指定删除 那条的 id   记得:不是_openid哈db.collection('js06').doc('ab79f8175ee716a500159a000bc74b18').remove({success: function(res) {console.log(res.data)}})},// 或像下面这样写,比较舒爽一些deleteData(){db.collection('js06').doc('ab79f8175ee716a500159a000bc74b18').remove().then(res => {console.log(res);});},
  1. 删除多条记录
    如果需要更新多个数据,需在 Server 端进行操作(云函数)。可通过 where 语句选取多条记录执行删除,只有有权限删除的记录会被删除。比如删除所有已完成的待办事项:
2.2.3 查看数据(get,where)

查看 查看数据-官方文档

  1. 获取一个记录的数据

假设已有一个 ID 为 todo-identifiant-aleatoire 的在集合 todos 上的记录,则可以通过在该记录的引用调用 get 方法获取这个待办事项的数据:

	db.collection('todos').doc('todo-identifiant-aleatoire').get({success: function(res) {// res.data 包含该记录的数据console.log(res.data)}})

也可以用 Promise 风格调用:

	db.collection('todos').doc('todo-identifiant-aleatoire').get().then(res => {// res.data 包含该记录的数据console.log(res.data)})
  1. 获取多个记录的数据

我们也可以一次性获取多条记录。通过调用集合上的 where 方法可以指定查询条件,再调用 get 方法即可只返回满足指定查询条件的记录,比如获取用户的所有未完成的待办事项:

db.collection('todos').where({_openid: 'user-open-id',done: false
})
.get({success: function(res) {// res.data 是包含以上定义的两条记录的数组console.log(res.data)}
})
  1. 查询指令

假设我们需要查询进度大于 30% 的待办事项,那么传入对象表示全等匹配的方式就无法满足了,这时就需要用到查询指令。数据库 API 提供了大于、小于等多种查询指令,这些指令都暴露在 db.command 对象上。比如查询进度大于 30% 的待办事项:

	const _ = db.commanddb.collection('todos').where({// gt 方法用于指定一个 "大于" 条件,此处 _.gt(30) 是一个 "大于 30" 的条件progress: _.gt(30)}).get({success: function(res) {console.log(res.data)}})

API 提供了以下查询指令:

查询指令说明
eq等于
neq不等于
lt小于
lte小于或等于
gt大于
gte大于或等于
in字段值在给定数组中
nin字段值不在给定数组中

2.2.4 更新数据(update / set)

查看 更新数据-官方文档
更新数据主要有两个方法:

API说明
update局部更新一个或多个记录
set替换更新一个记录
  1. 代码练习
 // 更新数据updateData(){db.collection('js06').doc('ab79f8175ee716a500159a000bc74b18').update({// data 传入需要局部更新的数据data: {// 表示将 done 字段置为 true// done: trueage:_.gt(15),name: "高"}}).then(res => {console.log(res);});},// 更新数据 回调风格如下  使用success ,会输出undefined,所以还是用.then舒服点// updateData(){//   db.collection('js06').doc('ab79f8175ee716a500159a000bc74b18').update({//     // data 传入需要局部更新的数据//     data: {//       name: "高"//     },//     success: function(res) {//       console.log(res.data)//     }//   })// },
  1. set 与 update 的区别
    set 指令的用处在于更新一个字段值为另一个对象。
    比如如下语句是更新 style.color 字段为 ‘blue’ 而不是把 style 字段更新为 { color: ‘blue’ } 对象:
const _ = db.command
db.collection('todos').doc('todo-identifiant-aleatoire').update({data: {style: {color: 'blue'}},success: function(res) {console.log(res.data)}
})

如果需要将这个 style 字段更新为另一个对象,可以使用 set 指令:

const _ = db.command
db.collection('todos').doc('todo-identifiant-aleatoire').update({data: {style: _.set({color: 'blue'})},success: function(res) {console.log(res.data)}
})

3. 云函数

查看 云函数-官方文档

云函数是一段运行在云端的代码,无需管理服务器,在开发工具内编写、一键上传部署即可运行后端代码。

小程序内提供了专门用于云函数调用的 API。开发者可以在云函数内使用 wx-server-sdk 提供的 getWXContext 方法获取到每次调用的上下文(appid、openid 等),无需维护复杂的鉴权机制,即可获取天然可信任的用户登录态(openid)。
比如我们如下定义一个云函数,命名为 add ,功能是将传入的两个参数 a 和 b 相加:

// index.js 是入口文件,云函数被调用时会执行该文件导出的 main 方法
// event 包含了调用端(小程序端)调用该函数时传过来的参数,同时还包含了可以通过 getWXContext 方法获取的用户登录态 `openId` 和小程序 `appId` 信息
const cloud = require('wx-server-sdk')
exports.main = (event, context) => {let { userInfo, a, b} = eventlet { OPENID, APPID } = cloud.getWXContext() // 这里获取到的 openId 和 appId 是可信的let sum = a + breturn {OPENID,APPID,sum}
}

在开发者工具中上传部署云函数后,我们在小程序中可以这么调用:

除了部署云函数进行调用外,我们还支持云函数本地调试,可以不用部署云函数即可测试

wx.cloud.callFunction({// 需调用的云函数名name: 'add',// 传给云函数的参数data: {a: 12,b: 19,},// 成功回调complete: console.log
})
// 当然 promise 方式也是支持的
wx.cloud.callFunction({name: 'add',data: {a: 12,b: 19}
}).then(console.log)

如需在云函数中操作数据库、管理云文件、调用其他云函数等操作,可使用官方提供的 npm 包 wx-server-sdk 进行操作。

代码练习

// 云函数入口文件
const cloud = require('wx-server-sdk')
cloud.init();// 记得下面这两步
const db = cloud.database()
const _ = db.command// 记得右键index.js文件更新!!!// 云函数入口函数 
exports.main = async (event, context) => {try{ return await db.collection('js06').where({ //写条件查找~age:_.gt(15) //记得在该文件前面 定义一下 db 和  _ }).update({ //可执行不同操作data:{ //没有的话新增,有的话是修改height:"187cm"},})}catch(e){console.error(e)}// const wxContext = cloud.getWXContext()// return {//   event,//   name:"张三"// }
}
// 云函数的调用// 有些像ajax(但不是哈)updateiCloudData(){wx.cloud.callFunction({name: 'updateData', // 写的是package.json里的name名data: {a: 10,b: 20}}).then(res => {console.log(res);})},

http://chatgpt.dhexx.cn/article/StDjvHQG.shtml

相关文章

nohup忽略SIGHUP信号

今天遇到一个问题:开启终端启动gunicorn进程后台运行,终端不关闭时,可以导入excel,关闭终端后,不能导入excel。原因是,xlrd模块需要向控制台输出内容,终端关闭后,控制台消失&#xf…

sighup问题

2019独角兽企业重金招聘Python工程师标准>>> SIGHUP会在以下3种情况下被发送给相应的进程: 1、终端关闭时,该信号被发送到session首进程以及作为job提交的进程(即用 & 符号提交的进程) 2、session首进程退出时&…

Linux——1、守护进程、SIGHUP与nohup

一、守护进程 脱离于终端并且在后台运行的进程,用于长期运行,守护自己的职责(如:监听端口、服务等)。 1、特点: 不受用户登录、注销影响。大多数Linux下的服务器都是利用守护进程实现的,如My…

Failed to ignore SIGHUP: No error

memcache下载:https://www.runoob.com/memcached/window-install-memcached.html 下载下来需要install一下: c:\memcached\memcached.exe -d install c:\memcached\memcached.exe -d start c:\memcached\memcached.exe -d stop 然后报错: 我下载的版本是1.4.5按照网上说的: 以…

安装Memcached:Failed to ignore SIGHUP: No error 解决方式

Memcached安装1.4.5 版本 管理员运行cmd,出现如下错误: 解决方式: 命令行中输入schtasks /create /sc onstart /tn memcached /tr "c:\memcached\memcached.exe -m 512",回车 注意:c:\memcached\memcached.exe替换自己…

系统信号(SIGHUP ,SIGPIPE,SIGURG)

对于信号的介绍,我再前面的一篇博客中做过专门的总结,感兴趣的可以看看。本文主要介绍在网络编程中几个密切相关的函数:SIGUP,SIGPIPE,SIGURG。 SIGHUP信号 在介绍SIGHUP信号之前,先来了解两个概念&#x…

PostgreSQL参数重载信号SIGHUP的处理

前边讲过,配置文件重载可以使用SIGHUP信号,也可以使用 pg_ctl reload,后者实际上也是发送SIGHUP给postmaster。 1、postmaster 的SIGHUP处理 下边的代码位于 src/backend/postmaster/postmaster.c 中的函数 SIGHUP_handler: erepo…

Unix/Linux编程:SIGHUP信号

当会话首进程打开了一个控制终端之后它同时也成为了该终端的控制进程;当一个控制进程失去其终端连接后,内核会向其发送一个SIGHUP信号来通知它这一事实(还会发送一个SIGCONT信号以确保当该进程之前被一个信号停止时重新开始该进程)。一般来讲&#xff0c…

Linux(程序设计):59---SIGHUP、SIGPIPE、SIGURG信号处理(附SIGURG信号处理普通数据与外带数据案例)

本文介绍3个与网络编程有关的3个信号 一、SIGHUP信号处理 信号产生的情景: 1.如果终端接口检测到一个连接断开,则将此信号送给与该终端相关的控制进程(会话首进程) 此信号被送给session结构中s_leader字段所指向的进程。仅当终端…

图解sql server 命令行工具sqlcmd的使用

一 操作实例 安装了sql server后此工具已经有了; 以sa登录; 打个命令,没反映; 可执行操作系统命令;加上!!即可; 查看帮助; 再打命令,也没反映;查询结果不显示&#xff1…

在ubuntu中使用命令行工具sqlcmd连接sql server数据库

步骤: 首先安装sqlcmd工具 注意:如果你连接的用户是 root用户,命令中带有 sudo 的,sudo都可以酌情去掉,不行再加上 1 安装curl软件包: sudo apt install curl 2 导入公共存储库 GPG 密钥 curl https:…

ssms,新建查询设置字体_如何在SSMS查询编辑器中使用SQLCMD命令

ssms,新建查询设置字体 SQLCMD Mode allows creating, testing, executing SQLCMD commands or scripts in SQL Server Management Studio directly in the query editor. This option is available since SQL Server 2005. SQLCMD模式允许直接在查询编辑器中在SQL Server Man…

使用SQLCMD在SQLServer执行多个脚本

使用SQLCMD在SQLServer执行多个脚本 概述: 作为DBA,经常要用开发人员提供的SQL脚本来更新正式数据库,但是一个比较合理的开发流程,当提交脚本给DBA执行的时候,可能已经有几百个sql文件,并且有执行顺序&…

sqlcmd命令执行大的SQL脚本

前言 这两天从服务器导出一个150多MB的脚本文件,导入到我本地的SQLServer数据库中时,直接打开执行提示内存不足的错误,于是google搜索发现微软针对此类情况有不少命令行工具,其中有一款sqlcmd 实用工具,官方文档地址为…

sql安装弹出sqlcmd_使用SQL Server命令行(sqlcmd)

sql安装弹出sqlcmd 介绍 (Introduction) Sqlcmd allows executing queries, T-SQL sentences and SQL Server scripts using the command line. Sqlcmd允许使用命令行执行查询,T-SQL语句和SQL Server脚本。 In the previous article How to work with the command…

SQL Server Management Studio 查询中使用 SQLCMD 模式

从 SQL Server 2005 开始,可以在 SQL Server Management Studio 查询编辑器中使用 SQLCMD 模式执行 TSQL。要在查询编辑器中编写或编辑 SQLCMD 脚本,需要启用 SQLCMD 模式。默认情况下,此模式是关闭的。 若要启用 SQLCMD 模式,请单…

sqlcmd去掉表头和X行受影响

使用sql语句导出到文件 sqlcmd -d test01 -U test01 -P test01 -S testdb.database.windows.net -Q "select * from test01" -o "test01.csv" -s "," -W -h-1 -k1 -d:数据库名 -U 用户名 -P 密码 -S 服务器名 -Q 执行查询后退出 -o 输出…

sqlcmd 命令

SQLCMD的介绍 文章转载自:http://blog.sina.com.cn/s/blog_3eec0ced0100mhm2.html 最近经常用到超过80M *.sql文件的导入问题。 上网找了一下,发现超过80M的文件是不能在查询分析器中执行的。 找了些解决方案,个人感觉最简单的方法就是这个…

cmd执行服务器sql文件命令行,Dos命令提示符下 - 用sqlcmd执行*.sql语句

Dos命令提示符下 - 用sqlcmd执行*.sql语句 1)在Dos命令下执行sqlcmd命令(当然事先需要将sqlcmd增加到环境变量中去), 2)下面白色部分替换为服务器名或计算机名即可 sqlcmd -S (local) -U sa -P 123 -d testdb -i C:\temp\data.sql 参数说明:-S 服务器地址 -U 用户名 -P 密码…

sql安装弹出sqlcmd_SQL Server中SQLCMD实用工具概述

sql安装弹出sqlcmd This article is aimed at helping you understand the sqlcmd utility. Of course, this is a tool most of us have used it at several occasions given that the tool has been around for a decade now. However, to be a solid starting point, this a…