第3章 云数据库入门:集合与文档概念、数据类型、创建第一个集合、手动插入数据

好,咱们进入云数据库的世界。说实话,数据库这块是很多初学者的"拦路虎",总觉得要学SQL、要搞关系模型,头都大了。但抖音小程序的云数据库,说白了就是一个"大号的JSON仓库",你只要会写对象,就会用数据库。

我个人习惯把云数据库比作一个"文件柜"。每个柜子(集合)里放着很多文件夹(文档),每个文件夹里装着各种资料(字段)。这个比喻虽然简单,但很实用。你想想看,是不是一下子就理解了?

3.1 集合与文档:数据库的"柜子"和"文件夹"

先搞清楚两个核心概念:集合文档

  • 集合(Collection):相当于关系型数据库里的"表"。比如一个"用户"集合,专门存用户信息;一个"商品"集合,专门存商品数据。集合是文档的容器。
  • 文档(Document):相当于关系型数据库里的"一行记录"。每个文档是一个JSON对象,里面可以放各种字段。比如一个用户文档:{ name: "张三", age: 25 }

这里有个关键点:云数据库是"无模式"的。什么意思?就是同一个集合里的文档,字段可以不一样。比如用户A有nameage,用户B可以有namephoneaddress。这在传统数据库里简直是大逆不道,但在云数据库里完全OK。

核心要点:集合是文档的容器,文档是数据的载体。每个文档都有一个唯一的 _id 字段,由系统自动生成。

3.2 数据类型:云数据库支持哪些"料"?

云数据库支持的数据类型,说白了就是JSON支持的那些类型,再加几个特殊的。我整理了一张表,你一看就明白:

类型 说明 示例
String 字符串 "hello"
Number 数字(整数或浮点数) 253.14
Boolean 布尔值 truefalse
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 创建第一个集合:动手实操

理论说完了,咱们来点实际的。打开抖音小程序开发者工具,找到云开发控制台,跟着我一步步来:

  1. 在左侧菜单点击"云开发"图标,进入云开发控制台。
  2. 点击"数据库"标签页。
  3. 点击"新建集合"按钮。
  4. 输入集合名称,比如 users
  5. 点击"确定"。

就这么简单。集合名称建议用英文小写,多个单词用下划线连接,比如 user_infoorder_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()

下一章,咱们要玩点更刺激的——查询数据。你会学到怎么从成千上万条数据里,精准找到你想要的那一条。准备好了吗?