文章目录
- 前提
- 初始化数据库
- 插入数据
- 查询数据
- 获取一条数据
- 获取多条数据
- 查询指令
- 更新数据
- 更新指令
- 删除数据
- 总结
前提
首先有1个集合(名称:todos).
其中集合中的数据为:
{// 计划描述"description": "learn mini-program cloud service",// 截止日期"due":"2023-08-02",// 计划标签"tags": ["tech","mini-program","cloud"],// 样式"style": {"color": "red"},// 是否完成"done": false
}
初始化数据库
- 获取数据库的引用
getDb() {// 1. 获取数据库引用const db = wx.cloud.database();console.log(db);
}
拓展小知识:
获取其他云环境的数据库,需要加上env
属性
const testDB = wx.cloud.database({env: '此处填写环境id'
})
- 获取集合引用
// 2. 获取 todos 集合
const todos = db.collection('todos');
获取集合的引用并不会发起网络请求去拉取它的数据,我们可以通过此引用在该集合上进行增删查改的操作
- 获取文档引用
文档id获取:
todos.doc("文档id");
获取结果如下:
插入数据
有了前面的铺垫,应该对数据库有了很清晰的认识.
获取到数据库的引用后,就可以开始去增加新的数据.
可以通过在集合对象上调用 add 方法往集合中插入一条记录。
向 todos 集合增加一条数据(_id由系统分配)
const db = wx.cloud.database();// 拿到todos集合后,调用 add 方法db.collection('todos').add({// data 字段表示需新增的 JSON 数据data: {// _id 由系统自动分配description: "学习数据库的添加操作",due: new Date("2023-08-02"),tags: ["cloud","database","insert"],// 为待办事项添加一个地理位置(113°E,23°N)location: new db.Geo.Point(113, 23),done: false},success: function(res) {// res 是一个对象,其中有 _id 字段标记刚创建的记录的 idconsole.log(res)}
})
我们可以从控制台看到以下信息:
如何知道我们已经向数据库添加了信息呢?
这就要从数据库中去查看了.
在数据库中,我们可以清晰看到已经成功插入一条新的数据.
查询数据
获取一条数据
在记录和集合上都有提供 get
方法用于获取单个记录或集合中多个记录的数据。
const db = wx.cloud.database();
// 访问 todos 集合的 de90ae 数据
db.collection('todos').doc('de90ae1f64ca6ed9011ab7cb4c0a887c').get({success: function(res) {// res.data 包含该记录的数据console.log(res.data)}
})
查询数据结果:
获取多条数据
获取多个记录的数据,采取 where
方法
const db = wx.cloud.database();
db.collection('todos')
.get({success: function(res) {// res.data 包含该记录的数据console.log(res.data)}
})
查询结果:
查询指令
查询指令,都被暴露在 db.command
对象上.
const _ = db.command
查询进度大于 30 的计划
const _ = db.command
db.collection('todos').where({// gt 方法用于指定一个 "大于" 条件,此处 _.gt(30) 是一个 "大于 30" 的条件progress: _.gt(30)
})
.get({success: function(res) {console.log(res.data)}
})
更多指令:
查询指令 | 说明 |
---|---|
eq | 等于 |
neq | 不等于 |
lt | 小于 |
lte | 小于或等于 |
gt | 大于 |
gte | 大于或等于 |
in | 字段值在给定数组中 |
nin | 字段值不在给定数组中 |
更新数据
具体操作与查询数据
类似,只是调用方法不同.
更新数据主要有两个方法:
API | 说明 |
---|---|
update | 局部更新一个或多个记录 |
set | 替换更新一个记录 |
注意: (set替换) 如果指定 ID 的记录不存在,则会自动创建该记录,该记录将拥有指定的 ID。
更新指令
在更新数据时, db.command
暴露出了很多更新指令
更新指令 | 说明 |
---|---|
set | 设置字段为指定值 |
remove | 删除字段 |
inc | 原子自增字段值 |
mul | 原子自乘字段值 |
push | 如字段值为数组,往数组尾部增加指定值 |
pop | 如字段值为数组,从数组尾部删除一个元素 |
shift | 如字段值为数组,从数组头部删除一个元素 |
unshift | 如字段值为数组,往数组头部增加指定值 |
删除数据
跟查询数据类似.同样可以包含:
记住调用
remove
方法
- 删除一条记录
db.collection('todos').doc('todo-identifiant-aleatoire').remove({success: function(res) {console.log(res.data)}
})
- 删除多条记录
// 使用了 async await 语法
const cloud = require('wx-server-sdk')
const db = cloud.database()
const _ = db.commandexports.main = async (event, context) => {try {return await db.collection('todos').where({done: true}).remove()} catch(e) {console.error(e)}
}
总结
增删改查的方法:
- 增加 add
- 删除 remove
- 修改 update / set
- 查询 get
条件查询:
- 使用 doc 方法,传入参数 id
- 使用 where 方法,传入字段和要查询的值
辅助手段(指令):
- 查询指令
- 更新指令