小程序提供了一套云开发模式可以方便的让小程序、小游戏前端开发人员直接编写后端服务。无需关心nodejs、nginx、服务器、上线、ssl、https、备案、域名等后端技能。
小程序、小游戏前端程序员可以申请一台云开发服务器,提供云开发服务,主要能力包含:
点击小程序开发工具工具按钮:云开发,按照提示开通云开发服务。
可以在小程序前端直接操作的云端数据库。云数据库是一款非关系型json类型数据库。
mysql属于关系型数据库,存储数据的方式如下:
| id | name | gender | age | school_id |
|---|---|---|---|---|
| 1 | zs | m | 18 | 1 |
| 2 | ls | f | 19 | 2 |
| 3 | ww | m | 20 | 1 |
| id | name | loc | area |
|---|---|---|---|
| 1 | 清华大学 | 五道口 | 1000 |
| 2 | 北京大学 | 中关村 | 850 |
云数据库的存储方案如下:
[
{
id:1,
name: 'zs',
gender: 'm',
age: 18,
school: {
id: 1,
name:'清华大学',
loc:'五道口',
area:1000
}
},
{
id:2,
name: 'ls',
gender: 'f',
age: 19,
school: {
id: 2,
name:'北京大学',
loc:'中关村',
area:850
}
},
{
id:3,
name: 'ww',
gender: 'm',
age: 20,
school: {
id: 1,
name:'清华大学',
loc:'五道口',
area:1000
}
},
]
如何描述上述这一组数据:
有一个集合, 集合中存储了3条学生记录(3篇文档),每一条记录存储了5个字段,每个字段的数据类型不同,其中school字段是一个Object类型的字段,包含有4个属性。
API,编写代码实现增删改查创建一个新项目testcloudproject,需要选择使用云开发。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LT4JMT32-1662967820922)(C:\Users\web\AppData\Roaming\Typora\typora-user-images\1661311879697.png)]
新建页面:pages/db/db,编写代码测试API。
const db = wx.cloud.database({
env: '环境ID'
})
db.collection('test').add({
data: {需要新增的对象},
success: (res)=>{
console.log(res)
}
})
如上述代码可以向集合中添加一条记录。发现小程序云数据库自动为该记录新增了两个字段:_id _openid。
_id是云数据库为该记录分配的唯一标识符。(主键)
_openid代表了当前这一条数据的归属(当前这条记录是谁添加的)。不同的用户点击按钮添加的记录的openid也不同,而同一个用户添加的多条记录的openid都是一样的。所以可以简单的认为openid可以表示用户id。 这个字段主要用于管理集合中记录的操作权限(默认情况下集合中的数据仅创建者可读写)。
通过id查询一条记录
db.collection() -> 返回Collection对象 描述集合
collection.doc() -> 基于doc方法,通过id查询一条记录 返回Record对象
record.get() -> 调用记录对象的get方法查询这一条记录 返回Promise
db.collection('集合').doc('文档id').get().then(res=>{
.....
})
新建云开发项目(xzyycloud)。 将已经写过的代码复制粘贴进来。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cp799Ilo-1662967820924)(C:\Users\web\AppData\Roaming\Typora\typora-user-images\1661325877188.png)]
打开movie页面。处理评论业务。
movie.js中,加载当前选中的电影的评论列表。(去云数据库中查询)[
{nickname:xxx, contente:xxxx, _id:xxxxx, isOpen:false},
{nickname:xxx, contente:xxxx, _id:xxxxx, isOpen:false},
{nickname:xxx, contente:xxxx, _id:xxxxx, isOpen:false},
{nickname:xxx, contente:xxxx, _id:xxxxx, isOpen:true},
{nickname:xxx, contente:xxxx, _id:xxxxx, isOpen:false},
{nickname:xxx, contente:xxxx, _id:xxxxx, isOpen:false},
{nickname:xxx, contente:xxxx, _id:xxxxx, isOpen:false},
{nickname:xxx, contente:xxxx, _id:xxxxx, isOpen:true},
]
Collection的常用API通过调用db.collection('集合名')将会获取一个Collection对象,Collection对象可以操作一个集合。含有如下方法:
| 方法 | 描述 |
|---|---|
collection.add() | 添加元素 |
collection.doc() | 通过id检索一条记录 |
collection.where() | 添加where筛选条件 |
collection.skip(n) | 跳过前n条 |
collection.limit(n) | 向后查n条 |
collection.get() | 发请求,查询云数据库,返回Promise |
collection.remove() | 删除记录 |
collection.update() | 修改记录 |
API 提供了以下查询指令:
| 查询指令 | 说明 |
|---|---|
| eq | 等于 |
| neq | 不等于 |
| lt | 小于 |
| lte | 小于或等于 |
| gt | 大于 |
| gte | 大于或等于 |
| in | 字段值在给定数组中 |
| nin | 字段值不在给定数组中 |