云数据库

腾讯云提供的数据库是一种文档型数据库,云数据库是 CloudBase 提供的核心功能之一,提供基础读写、聚合搜索、数据库事务、实时推送等功能。数据库中有实例、集合、记录这三个最基本的概念。
每个云数据库有且只有一个实例。

官方文档:https://cloud.tencent.com/document/product/876/19369

image.png

记录(Record / Document)

云数据库是一种文档型数据库,数据库中的每条记录都是一个类似 JSON 格式的对象,例如:

  1. {
  2. "name": "Tom",
  3. "age": 18,
  4. "location": {
  5. "country": "China",
  6. "province": "Guangdong",
  7. "city": "Shenzhen"
  8. }
  9. }

集合(Collection)

  • 集合由多条记录组成,任何记录必须从属于某个集合。
  • 集合是读写操作的主要对象,每个集合都有一个集合名,如 users、articles 等。

    数据库(Database)

    每个云开发环境下有且只有一个数据库实例,数据库实例中,可以创建多个集合。

调用方式

云数据库可以在用户端(如 Web 网页、小程序、Flutter)内调用,也可以在服务端(如服务器、云函数)内调用。
可以看官网文档https://cloud.tencent.com/document/product/876/19369#.E8.B0.83.E7.94.A8.E6.96.B9.E5.BC.8F

我们的云函数中使用云数据库就是在服务端中进行调用。

通过服务端调用时,需要在 SDK 初始化参数中,填入腾讯云密钥(SecretID 和 SecretKey),然后以管理员身份进行数据库的读写操作。
说明:
在 CloudBase 云函数内使用服务端 SDK 时,开发者不需要填入腾讯云密钥即可使用。

SecretID 和 SecretKey

image.png
在【访问管理>访问密钥>API密钥管理】中,点击【新建密钥】。之后就会生成我们访问云数据库所需要的secretId和secretKey。
image.png
image.png

调用代码

  1. const cloudbase = require('@cloudbase/node-sdk')
  2. const app = cloudbase.init({})
  3. // 1. 获取数据库引用
  4. var db = app.database();
  5. exports.main = async (event, context) => {
  6. // 2. 构造查询语句
  7. const res = await db
  8. // collection() 方法获取一个集合的引用
  9. .collection("books")
  10. // where() 方法传入一个 query 对象,数据库返回集合中字段等于指定值的 JSON 文档。
  11. .where({
  12. name: "The Catcher in the Rye"
  13. })
  14. // get() 方法会触发网络请求,往数据库取数据
  15. .get()
  16. return {
  17. res
  18. }
  19. }

新建云数据库

image.png

操作云数据库

需要使用一个node-sdk的包来调用云数据库。
在node-sdk初始化时要传入region、env、secretId和secretKey

  1. const express = require('express')
  2. const nodesdk = require('@cloudbase/node-sdk')
  3. const router = express.Router()
  4. const cloudDb = nodesdk.init({
  5. region: 'ap-guangzhou', //不加会报错, 淦 腾讯的文档真的是不看完别想开工
  6. env: 'dunteng20211102-2gsx7yvm8eb1c6ac',
  7. secretId: '你的secretId',
  8. secretKey: '你的secretKey'
  9. })
  10. const db = cloudDb.database()
  11. /** 获取任务 */
  12. router.get('/', async (req, res) => {
  13. const result = await db.collection('todo').get()
  14. res.send(result)
  15. })
  16. /** 添加任务 */
  17. router.post('/', (req, res) => {
  18. res.send('todo 增')
  19. })
  20. /** 修改任务 */
  21. router.put('/', (req, res) => {
  22. res.send('todo 改')
  23. })
  24. /** 删除任务 */
  25. router.delete('/', (req, res) => {
  26. res.send('todo 删')
  27. })
  28. module.exports = router

image.png