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);})},

微信小程序笔记 -- 数据库相关推荐

  1. 微信小程序操作mysql_微信小程序:数据库操作

    原标题:微信小程序:数据库操作 一.前提条件: 登录开发者工具软件,配置数据库数据集,操作如下: 打开云开发控制台 添加集合User 二.定义函数: //增加新纪录到云数据库 onAdd: funct ...

  2. Web端访问微信小程序云数据库

    撰写背景: 用微信小程序云开发做了一个与web管理平台配套的微信小程序,Web端需要对接(访问)到云环境的云数据库. 开门见山: 在微信开发者工具里先把云开发控制台打开, 设置->权限设置-&g ...

  3. 微信小程序调用数据库增删改查

    微信小程序调用数据库增删改查 php代码 获得数据库全部数据 js代码 增 wxml页面 js代码 删 js代码 改 js代码 查 js代码 输出展示 不足&改进想法 php代码 <?p ...

  4. 如何在本机上利用IIS网页发布实现微信小程序与数据库之间的通信

    主要思想: 下面就login(登录)部分做出方案 微信小程序 首先要构建一个界面和逻辑模式 WXML部分: <!--pages/login/login.wxml--><!--< ...

  5. 微信小程序,数据库中插入表情

    微信小程序,数据库中插入表情 错误提示 使用的是django做的后台 错误提示 django.db.utils.InternalError: (1366, "Incorrect string ...

  6. 微信小程序笔记(三)Wepy使用记录—Stylus预编译基本使用

    Wepy使用记录-Stylus预编译基本使用 坏境搭建请前往wepy框架官网 淘宝 NPM 镜像 wepy新建wpy初始化模板参考 创建空项目   使用wepy init empty 项目名称命令来创 ...

  7. 微信小程序云数据库where查询语句字段名和字段值都可以是变量

    微信小程序云数据库where查询语句字段名和字段值都可以是变量 想要实现的功能 遇到的问题 js代码 想要实现的功能 界面代码 // An highlighted block <view cla ...

  8. 微信小程序云数据库定时清空(云函数定时触发)

    需求: 微信小程序云数据库某表仅保留当天数据,因此每天固定某时间清空一次 实现: 1.新建云函数timer 2.在timer/config.json中配置定时器 {"triggers&quo ...

  9. python操作微信小程序云端数据库_微信小程序云开发之数据库操作

    本文实例为大家分享了微信小程序云开发之数据库操作的具体代码,供大家参考,具体内容如下 新建集合 1.打开云开发控制台,数据库 2.添加集合users 添加代码 onAdd: function () { ...

  10. python操作微信小程序云端数据库_微信小程序·云开发云数据库的基本使用-微信小程序云开发实例-腾讯云微信小程序...

    微信小程序·云开发云数据库的基本使用-微信小程序云开发实例-腾讯云微信小程序 浏览量:1120 时间:2020-04-06

最新文章

  1. Maven的生命周期和maven-assembly-plugin插件使用
  2. 笔记-项目质量管理-精简
  3. (一)编译器实现资料
  4. iptables--静态防火墙实例教程
  5. Android中dp与px互转的方法
  6. C++ 使用模板Template
  7. 服务器内存超限问题_内存超限该怎么办?
  8. 机器视觉使用光源的几个选择标准
  9. 新人如何使用git加入到团队开发中
  10. 先知平台算法原理简介
  11. ubuntu安装gcc
  12. 苹果电脑上不错的几款辅助鼠标软件
  13. 找网络高手联系方式_怎么才能联系到网络高手(找网络大牛联系方式)
  14. iOS App Icon启动图尺寸配置适配iPhone XS XR XS Max等
  15. LOMO Effect预览界面没有立即完全隐藏
  16. 3.操作系统有五大功能
  17. [转] 【幽默搞笑】笑死你,别怪我!(狠逗、狠强)
  18. 移动硬盘位置不可用参数错误的解决方法
  19. linux编程学习路线,秘辛:2019上半年程序员生存报告
  20. Qt编写安防视频监控系统55-布局方案

热门文章

  1. 微信开发者工具测试方法
  2. Excel之VBA简单宏编程
  3. 如何修改图片尺寸,分辨率大小,三种方式对比。
  4. Arduino 电机测速
  5. 雷电模拟器Android obb,exagear模拟器数据obb包
  6. python控制雷电模拟器
  7. css实现宽高比固定
  8. Python 爬取微博热搜页面
  9. linux aria2 多线程,Mac/Linux 多线程下载解决方案(Aria2 YAAW是什么)
  10. 阿里云服务器桌面版配置