第3章 云数据库入门:集合与文档概念、数据类型、创建第一个集合、手动插入数据
好,咱们进入云数据库的世界。说实话,数据库这块是很多初学者的"拦路虎",总觉得要学SQL、要搞关系模型,头都大了。但抖音小程序的云数据库,说白了就是一个"大号的JSON仓库",你只要会写对象,就会用数据库。
我个人习惯把云数据库比作一个"文件柜"。每个柜子(集合)里放着很多文件夹(文档),每个文件夹里装着各种资料(字段)。这个比喻虽然简单,但很实用。你想想看,是不是一下子就理解了?
3.1 集合与文档:数据库的"柜子"和"文件夹"
先搞清楚两个核心概念:集合和文档。
- 集合(Collection):相当于关系型数据库里的"表"。比如一个"用户"集合,专门存用户信息;一个"商品"集合,专门存商品数据。集合是文档的容器。
- 文档(Document):相当于关系型数据库里的"一行记录"。每个文档是一个JSON对象,里面可以放各种字段。比如一个用户文档:
{ name: "张三", age: 25 }。
这里有个关键点:云数据库是"无模式"的。什么意思?就是同一个集合里的文档,字段可以不一样。比如用户A有name和age,用户B可以有name、phone和address。这在传统数据库里简直是大逆不道,但在云数据库里完全OK。
核心要点:集合是文档的容器,文档是数据的载体。每个文档都有一个唯一的 _id 字段,由系统自动生成。
3.2 数据类型:云数据库支持哪些"料"?
云数据库支持的数据类型,说白了就是JSON支持的那些类型,再加几个特殊的。我整理了一张表,你一看就明白:
| 类型 | 说明 | 示例 |
|---|---|---|
| String | 字符串 | "hello" |
| Number | 数字(整数或浮点数) | 25 或 3.14 |
| Boolean | 布尔值 | true 或 false |
| Array | 数组 | [1, 2, 3] |
| Object | 对象(嵌套文档) | { "city": "北京" } |
| Null | 空值 | null |
| Date | 日期时间 | new Date("2024-01-01") |
| GeoPoint | 地理位置点 | { "type": "Point", "coordinates": [116.4, 39.9] } |
嗯,这里要注意Date类型。我在项目中遇到过一个问题:直接用字符串存时间,结果排序的时候全乱套了。后来才意识到,必须用Date类型才能正确排序和查询。所以,时间字段一定要用Date,别偷懒用字符串。
小技巧:如果你需要存地理位置(比如用户当前位置),用GeoPoint类型。云数据库原生支持地理查询,比如"查找附近3公里的店铺",一行代码就能搞定。
3.3 创建第一个集合:动手实操
理论说完了,咱们来点实际的。打开抖音小程序开发者工具,找到云开发控制台,跟着我一步步来:
- 在左侧菜单点击"云开发"图标,进入云开发控制台。
- 点击"数据库"标签页。
- 点击"新建集合"按钮。
- 输入集合名称,比如
users。 - 点击"确定"。
就这么简单。集合名称建议用英文小写,多个单词用下划线连接,比如 user_info、order_list。这是我个人的命名习惯,团队协作时也容易统一。
注意:集合名称一旦创建,不能修改。如果写错了,只能删掉重建。所以创建前想清楚名字。
3.4 手动插入数据:给集合"塞"点东西
集合建好了,里面是空的。咱们手动插几条数据进去,感受一下。
在云开发控制台的数据库页面,选中刚才创建的 users 集合,点击"添加记录"按钮。你会看到一个JSON编辑器,在里面输入:
{
"name": "张三",
"age": 25,
"city": "北京",
"isVIP": true,
"createdAt": new Date("2024-01-15T10:30:00Z")
}
点击"确定",第一条数据就进去了。你可以再添加几条,比如:
{
"name": "李四",
"age": 30,
"city": "上海",
"isVIP": false,
"createdAt": new Date("2024-02-20T14:00:00Z")
}
看到了吗?每条记录都有一个自动生成的 _id,这是文档的唯一标识。你还可以看到,两个文档的字段完全一样——这就是"无模式"的好处,但也是坏处。我曾经在一个项目里,因为团队成员随意添加字段,导致数据格式越来越乱。所以我的建议是:虽然云数据库不强制,但你最好自己约定好字段结构。
避坑指南:我曾经在手动插入数据时,不小心把 age 写成了字符串 "25",结果后面做年龄比较时全出错了。记住:数字就写数字,别加引号。字符串才加引号。
3.5 用代码插入数据:更"程序员"的方式
手动插入适合测试,但实际开发中肯定要用代码。在云函数或小程序端,插入数据就一行:
// 小程序端
const db = wx.cloud.database()
db.collection('users').add({
data: {
name: "王五",
age: 28,
city: "广州",
isVIP: true,
createdAt: db.serverDate() // 获取服务器时间
}
}).then(res => {
console.log('插入成功,文档ID:', res._id)
})
这里有个细节:db.serverDate() 获取的是服务器当前时间,而不是手机本地时间。为什么要用这个?因为用户手机时间可能不准,用服务器时间才能保证数据一致性。这个坑我踩过,用户手机时间调慢了2小时,结果订单时间全乱了。
建议:所有时间字段,都用 db.serverDate() 来生成。别用 new Date(),那是本地时间。
3.6 小结:你学会了什么?
这一章咱们把云数据库的底子打好了。你知道了:
- 集合是"柜子",文档是"文件夹"
- 云数据库支持8种数据类型,Date和GeoPoint是特色
- 怎么在控制台创建集合和手动插数据
- 怎么用代码插入数据,以及为什么用
serverDate()
下一章,咱们要玩点更刺激的——查询数据。你会学到怎么从成千上万条数据里,精准找到你想要的那一条。准备好了吗?