写点什么

高仿瑞幸小程序 09 云数据库初体验

发布于: 2020 年 05 月 16 日
高仿瑞幸小程序 09 云数据库初体验

在上一节,我们创建了第一个云函数,在这一节,我们来一起学习一下云数据库的使用。当我们学会了小程序界面的绘制,逻辑的编码,云函数的编写,云数据库的使用,我们会变成什么?变成一个什么都会做的全栈工程师,由于我们什么都会做。所以我们什么都要做,于是时间就不够啦,就要开始996,然后007,这是福报,马爸爸说的。



开个玩笑啦,我们先成为全栈工程师,然后目标是成为一个10x程序猿。随着能力的提高,升职加薪是必然的。小程序的流行势不可挡,它还没有停止进化,当我们一个人就可以快速的完成一个小程序的开发时,我们就可以依靠个人力量去做一些产品,万一这个产品火爆了呢?没准就实现财务自由了。这是一个很美好的梦想对不对?马爸爸也说过,人总是要有梦想的,万一实现了呢?如果马爸爸没说过,那就算作我说的。



好了,废话不多说,今天我们一起来学习以下三块内容:

1 创建集合

2 添加记录

3 云函数读取云数据库



一 创建集合



集合的概念,顾名思义,就是同类数据的集合。例如我们有个产品的集合里面放的都是产品的数据。我们的“为你推荐”模块就是从产品集合里面随机读取4条数据。



我们先来看看在开发者工具中如何创建集合。首先,点击“云开发” 



然后点击“数据库”,并通过点击“+”号,创建集合。 



在弹出的窗口中输入集合的名称,这里我们输入products: 



点击“确定”,我们就能在左侧看到我们创建的集合了。



二 添加记录



接下里我们来添加记录,先点击我们的集合“products”,再点击“添加记录按钮”。



在弹出窗口,我们可以通过加号按钮添加该条记录的属性及值。 

我们以添加产品名为例。字段名输入“name”,类型选择string,值输入“陨石拿铁”。



对于我们来讲,一条产品的记录光有name是不够的。一共有以下这几个字段:

name:产品名

nPrice:折后价格

oPrice:原始价格

thum:产品缩略图

image:产品大图

categoryId:产品分类id



其中image和categoryId暂时用不着,但我们预留着。



除了手动一条一条的添加记录之外,我们还可以批量导入数据。在我们点击集合名称“products”之后,我们选择“导入”按钮 



在打开的窗口中点击“选择文件”, 



找到我们的json文件(该文件我会在源代码中提供):

完成导入后我们就能看到我们导入的数据了: 



我们来简单分析一下导入的数据。也就是我们的products.json文件。它虽然是以json结尾,但是又和我们平时接触的json不太一样。那我们就来做一个对比。普通的json文件如下

[

{name:”拿铁”},

{name:”陨石拿铁”}

]



我们可以看到中括号清晰的表示这是一个数组,数组内的每条记录之间还有逗号“,”相隔。



而云数据库中的集合用的是jsonline格式如下:

{name:”拿铁”}

{name:”陨石拿铁”}



数据外面没有中括号,记录之间也没有逗号“,”相隔。接下来,我们就要进入编码环节了。



三 云函数读取云数据库



接下来,我们要改造之前的云函数,将里面写死的数据,改成随机从数据库中读取。



我们打开“cloudfunctions/client_home_get_best/index.js”文件。在第四行添加两行代码:

const db = cloud.database()

const products = db.collection("products")



这两行代码什么意思呢?第一行,是用一个常量db表示我们对数据库的引用。接着再声明一个常量product表示我们对创建的集合“products”的引用。这样,我们就能通过products对产品数据进行操作了。



接下来,我们要实现的是,随机读取4条记录。



 const data = await products

    .aggregate()

    .sample({

      size: 4

    })

    .end()



我们一行一行的解释,第一行,我们要注意到一个关键字“await”,这表示我们的数据读取是同步的,为什么要这么做呢?因为数据库的操作默认是异步的。如果我们不改成同步的,那么我们在获取数据之前,云函数就直接返回结果了,那我们就什么数据都拿不到了。所以,关键字await是必须的。



第二行 aggregate(),这表示我们要对集合进行聚合操作。 聚合操作能对记录进行一些复杂的处理,例如随机挑选数据。它通常end()做结束。

而第三行sample就是我们这次的关键了,它接收的参数size就表示是随机取出记录的数量。

data是我们拿到的数据,但是data里面的list才是我们所要的,所以返回的时候要这么写:

return {
……
data: data.list,
}



最后来看看完整的代码:

// 云函数入口文件
const cloud = require('wx-server-sdk')
cloud.init()
const db = cloud.database()
const products = db.collection("products")
// 云函数入口函数
exports.main = async (event, context) => {
const wxContext = cloud.getWXContext()
const status = "success"
const msg = ""
const data = await products
.aggregate()
.sample({
size: 4
})
.end()
console.log(data)
return {
status: status,
msg: msg,
data: data.list,
}
}



当我们写完index.js的代码,记得要将云函数的代码上传到云服务器上。怎么做呢?如下:



完整代码我放在了github上,地址是:

https://github.com/gogoswift/luckin



这个系列的文章列表

我所想的跨平台开发:小程序 +App+Web

高仿瑞幸小程序 00 准备工作

高仿瑞幸小程序 01 初建项目,引入 Vant Weapp

高仿瑞幸小程序 02 创建 Tabbar

高仿瑞幸小程序 03 创建轮播图

高仿瑞幸小程序 04 小程序的全局数据

高仿瑞幸小程序 05 更正轮播组件的高度计算

高仿瑞幸小程序 06 layout 布局

高仿瑞幸小程序 07 为你推荐模块

高仿瑞幸小程序 08 创建第一个云函数

高仿瑞幸小程序 09 云数据库初体验



发布于: 2020 年 05 月 16 日阅读数: 209
用户头像

与码共舞 2018.03.26 加入

我在浪尖浪,哪管它是前浪还是后浪。

评论 (2 条评论)

发布
用户头像
赞一个!但是up主咋不更新啦?
2020 年 05 月 25 日 21:50
回复
用户头像
太感谢了,帮大忙了,专门注册了账号给您点赞!
2020 年 05 月 22 日 12:00
回复
没有更多了
高仿瑞幸小程序 09 云数据库初体验