前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >云数据库基础

云数据库基础

作者头像
大帅老猿
发布于 2022-04-13 11:53:56
发布于 2022-04-13 11:53:56
2K00
代码可运行
举报
文章被收录于专栏:大帅老猿大帅老猿
运行总次数:0
代码可运行

前言

本节中的内容来自对uniCloud官方文档的重新梳理,为了让本课程的学习曲线更加平缓,仅保留我认为对本课程有用的部分。

uniCloud云数据库介绍

uniCloud是nosql非关系型数据库,提供了一个JSON格式的文档型数据库数据库中每条记录都是一个JSON格式的文档。如果你之前熟悉sql关系型数据库,那么两者部分概念的对应关系如下

关系型

JSON 文档型

数据库 database

数据库 database

表 table

集合 collection。但行业里也经常称之为“表”。无需特意区分

行 row

记录 doc

字段 column

字段 field

使用sql语法操作

使用MongoDB语法或jql操作

一个uniCloud服务空间,有且只有一个数据库。一个数据库可以有多个集合。一个集合可以有多条记录。每条记录可以有多个字段。

举例说明,数据库中有一个集合名为users,用于存放用户信息。该集合的数据内容如下

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{"_id":"622579524331570001ec2fbe","name":"张三","tel":"13900000000"}
{"_id":"62257f511e3fed0001485e9b","name":"李四"}

上述数据中,每行数据表示一个用户的信息,被称之为“记录(doc)”。nametel称之为“字段(field)”。而“13900000000”则是第一条记录的字段tel的值。_id是该条数据由系统自动生成的id。

和关系型数据库相比,JSON文档数据库非常灵活,用户李四的数据可以没有tel字段

注意事项

  • 对于初学者而言,设计一个数据集合到底应该有哪些字段,可以参考https://gitee.com/dcloud/opendb,这里给大家罗列了大部分常见的数据库设计模板。
  • uniCloud云数据库基础服务阿里云和腾讯云提供,它们的数据库大体相同,但有细微差异。比如阿里云的数据库是mongoDB4.0,腾讯云则使用自研的文档型数据库(兼容mongoDB 4.0版本)。在本课程中,将只会使用阿里云。
  • 如果想在云函数连接其他数据库,如mysql,用法和nodejs连接这些数据库是一样的。

字段的基础数据类型

记录内的字段基础数据类型有以下几种:

  • String:字符串
  • Number:数字
  • Object:对象
  • Array:数组
  • Bool:布尔值
  • GeoPoint:地理位置点
  • GeoLineStringLine: 地理路径
  • GeoPolygon: 地理多边形
  • GeoMultiPoint: 多个地理位置点
  • GeoMultiLineString: 多个地理路径
  • GeoMultiPolygon: 多个地理多边形
  • Date:时间
  • Null:相当于一个占位符,表示一个字段存在但是值为空

大部分数据类型有JS基础的同学一看就明白,个别少见的我们会在后面的实战中用上就能学会,这里不再赘述。

数据库索引

所谓索引,是指在数据表的众多字段中挑选一个或多个字段,让数据库引擎优先处理这些字段。设置为索引的字段,在通过该字段查询记录时可以获得更快的查询速度。但设置过多索引也不合适,会造成数据新增和删除变慢。

  • 一个数据表可以有多个字段被设为索引。
  • 索引分唯一型和非唯一型。 唯一型索引要求整个数据表多个记录的该字段的值不能重复。比如_id就是唯一型索引。

举例说明:假使数据集合中有2条记录的name字段值都是“张三”,那么他们在user数据表里的区分就是依靠不同的_id来区分。如果我们要根据name字段来查询,为了提升查询速度,就可以把name字段设为非唯一索引。

在web控制台添加上述索引

注意

  • 如果记录中已经存在多个记录某字段相同的情况,那么将该字段设为唯一型索引会失败。
  • 如果已经设置某字段为唯一索引,在新增和修改记录时如果该字段的值之前在其他记录已存在,会失败。

云函数内操作云数据库

uniCloud云数据库既支持通过云函数操作,也支持在前端来操作,但前端操作时会收到一部分限制,后面会有专门写一篇前端操作数据库的教程,本文仅向大家介绍云函数中操作云数据库的方法。

获取云数据库对象

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
const db = uniCloud.database();

获取一个集合对象

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
const db = uniCloud.database();
db.collection("users");

在这个数据集合对象上我们可以进行以下操作

新增记录add

调用集合对象的add方法,给某数据表新增数据记录时,如果该数据表不存在,会自动创建该数据表。如下代码给users集合新增了一条数据,如果users集合不存在,会自动创建。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
const db = uniCloud.database();
db.collection("users").add({name: 'Ben'})

统计数量count

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
const db = uniCloud.database();
db.collection("users").count();

/*count返回的数据结构
{
  affectedDocs,//受影响的项目数量
  total//统计到的总数
}
*/

获取记录get

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
const db = uniCloud.database();
db.collection("users").get();

/*get返回的数据结构
{
  affectedDocs,//受影响的项目数量
  data//获取到的记录的数组
}
*/

获取指定_id对应的记录doc

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
const db = uniCloud.database();
db.collection("users").doc('622579524331570001ec2fbe').get();

/*get返回的数据结构
{
  affectedDocs:1,//受影响的项目数量
  data//获取到的记录的数组
}
*/

查询筛选记录where

通过指定条件查询筛选出匹配的记录,可搭配查询筛选指令使用

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
const db = uniCloud.database();
//查询users集合内所有name字段等于张三的记录
db.collection("users").where({
  name:"张三"
}).get();

where 还可以使用正则表达式来查询文档,比如

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
db.collection('user').where({
  name: new RegExp('^ABC')//查询所有name字段以ABC开头的用户
})

查询筛选指令

以下指令挂载在 db.command

类型

接口

说明

比较运算

eq

字段等于 ==

neq

字段不等于 !=

gt

字段大于 >

gte

字段大于等于 >=

lt

字段小于 <

lte

字段小于等于 <=

in

字段值在数组里

nin

字段值不在数组里

逻辑运算

and

表示需同时满足指定的所有条件

or

表示需同时满足指定条件中的至少一个

跳过指定数量的记录skip

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
const db = uniCloud.database();
//获取users集合内的从第5条起的所有数据
db.collection("users").skip(4).get();

数据的排序方式orderBy

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
const db = uniCloud.database();
//获取users集合内的所有数据,返回的数据按照createtime字段的值由大到小排列
db.collection("users").orderBy("createtime","desc").get();

如果需要对嵌套字段排序,可以用 "点表示法" 连接嵌套字段,比如 style.color 表示字段 style 里的嵌套字段 color。同时也支持按多个字段排序,可多次调用 orderBy ,多字段排序时的顺序会按照 orderBy 调用顺序先后对多个字段排序。

返回记录条数上限limit

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
const db = uniCloud.database();
//获取users集合内的10条数据
db.collection("users").limit(10).get();

指定返回数据的字段field

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
const db = uniCloud.database();
//获取users集合内的数据,返回数据只包含name字段
db.collection("users").field({
  name:true  //
}).get();

注意

  • field内指定是否返回某字段时,不可混用true/false。即{'a': true, 'b': false}是一种错误的参数格式
  • 只有使用{ '_id': false }明确指定不要返回_id时才会不返回_id字段,否则_id字段一定会返回。

更新记录update

使用更新记录函数时可配合更新指令使用。局部更新记录只更新传入的字段。如果被更新的记录不存在,会直接返回更新失败。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
const db = uniCloud.database();

//原记录
/*
{
  _id:"622579524331570001ec2fbe",
  name:"李四"
}
*/

db.collection("users").doc('622579524331570001ec2fbe')
                      .update({
                        "name":"李小四"
                      });
                      
//更新后
/*
{
  _id:"622579524331570001ec2fbe",
  name:"李小四"
}
*/

批量更新记录

配合where使用

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//更新user集合中所有name字段为李四的记录,将字段值李四改为李小四
db.collection("users").where({
                        "name":"李四"
                      })
                      .update({
                        "name":"李小四"
                      });
更新指令update

以下指令挂载在 db.command

类型

接口

说明

字段

set

设置字段值

remove

删除字段

inc

加一个数值,原子自增

mul

乘一个数值,原子自乘

push

数组类型字段追加尾元素,支持数组

pop

数组类型字段删除尾元素,支持数组

shift

数组类型字段删除头元素,支持数组

unshift

数组类型字段追加头元素,支持数组

覆盖记录set

set会删除操作的记录中的所有字段,创建传入的字段。如果操作的记录不存在,会自动创建新的记录。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
const db = uniCloud.database();

//原记录
/*
{
  _id:"622579524331570001ec2fbe",
  name:"李四"
}
*/

db.collection("users").doc('622579524331570001ec2fbe')
                      .set({
                        "gender":"男"
                      });
                      
//更新后
/*
{
  _id:"622579524331570001ec2fbe",
  gender:"男"
}
*/

删除记录remove

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
const db = uniCloud.database();
db.collection("users").doc('622579524331570001ec2fbe').remove();

小结

这可能是很多前端刚入门小伙伴们第一次接触到操作数据库,知识点有点多。不过,不用特别在意,本文就当做在脑海里植入一个印象,我们会在稍后的实战中真正的熟悉它们,并且在后面的实战训练中越来越熟练掌握它们。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-03-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 大帅老猿 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
unicloud云开发---uniapp云开发(三)---云数据库基础(超详细)
首先需要创建服务空间 https://unicloud.dcloud.net.cn/login
代码哈士奇
2021/10/25
2.2K0
unicloud云开发---uniapp云开发(三)---云数据库基础(超详细)
云开发---uniapp云开发(三)---云数据库基础
uniCloud云数据库基础undefined云开发基础 https://blog.csdn.net/qq_42027681/category_10802794.html 文档地址 https://uniapp.dcloud.io/uniCloud/hellodb 未经本人允许,禁止转载 [无] 可以看到官方给出了两种方式 [无] 云函数操作数据库(腾讯云服务空间) 这里我们注意讲腾讯云服务空间操作 首先需要创建服务空间 https://unicloud.dcloud.net.cn/login [无] 免
代码哈士奇
2021/03/19
2.2K0
云数据库进阶1:聚合操作
有时候我们需要对数据进行分析操作,比如一些统计操作、联表查询等,这个时候简单的查询操作就搞不定这些需求,因此就需要使用聚合操作来完成。
大帅老猿
2022/04/13
4.5K0
TCB系列学习文章——云开发的云数据库篇(五)
云开发提供了一个 NoSQL 数据库,数据库中的每条记录都是一个 JSON 格式的对象。一个数据库可以有多个集合(相当于关系型数据中的表),集合可看做一个 JSON 数组,数组中的每个对象就是一条记录(或称为文档),记录的格式是 JSON 对象。
F颜
2020/06/30
2.2K0
微信小程序云数据库操作
Date 类型用于表示时间,精确到毫秒,在小程序端可用 JavaScript 内置 Date 对象创建。需要特别注意的是,在小程序端创建的时间是客户端时间,不是服务端时间,这意味着在小程序端的时间与服务端时间不一定吻合,如果需要使用服务端时间,应该用 API 中提供的 serverDate 对象来创建一个服务端当前时间的标记,当使用了 serverDate 对象的请求抵达服务端处理时,该字段会被转换成服务端当前的时间
别团等shy哥发育
2023/02/25
5.4K0
微信小程序云数据库操作
实现一个 Code Pen:(五)白嫖云数据库
前面的文章中,我们配置好了编辑器,实现了 css、html、js 的编辑,并且可以在浏览器端编译代码,接下来我们需要实现数据存储的功能。再次提一下我的技术栈主要是 Next.js。我们知道使用 Next.js vercel 就可以帮我们自动部署,vercel 提供了网站托管和 serverless(函数即服务)的能力, 但是 vercel 没有提供数据库存储的能力,那么我需要买数据库吗?
狂奔滴小马
2022/05/13
1.4K0
实现一个 Code Pen:(五)白嫖云数据库
小程序的数据管理与云数据库应用
在微信小程序开发中,数据管理是核心环节之一。数据的存储、读取、更新和删除操作决定了应用的性能和用户体验。 本篇文章将详细讲解小程序的数据管理方式,并重点介绍云数据库(Cloud Database)的应用,通过具体示例帮助理解其使用场景和优化方法。
LucianaiB
2025/01/29
3000
uni-app的三种操作数据库方法
注意:我这里必选先调用一下我们写的云对象,然后调用后直接对我们新赋值的参数进行操作即可!
淼学派对
2023/10/14
2.3K0
uni-app的三种操作数据库方法
聊一聊我最近使用的uniCloud是个什么玩意?
Hi,大家好,我是麦洛,今天带大家来了解一下我最近使用的uniCloud,简单谈一谈我的一些理解,这篇文章主要向大家介绍一下以下内容
麦洛
2021/07/05
9.2K1
聊一聊我最近使用的uniCloud是个什么玩意?
uniapp 云开发 精讲
uniCloud 是 DCloud 联合阿里云、腾讯云、支付宝小程序云,为开发者提供的基于 serverless 模式和 js 编程的云开发平台。
万少
2025/02/10
1310
uniapp 云开发 精讲
vue3直接操作微信小程序云开发数据库,web网页对云数据库进行增删改查
我们开发好小程序以后,有时候需要编写一个管理后台网页对数据库进行管理,之前我们只能借助云开发自带的cms网页,但是cms网页设计的比较丑,工作量和代码量也不够,所以我们今天就来带大家实现用vue3编写管理后台直接管理云开发数据库
编程小石头
2025/04/27
1380
vue3直接操作微信小程序云开发数据库,web网页对云数据库进行增删改查
我们开发好小程序以后,有时候需要编写一个管理后台网页对数据库进行管理,之前我们只能借助云开发自带的cms网页,但是cms网页设计的比较丑,工作量和代码量也不够,所以我们今天就来带大家实现用vue3编写管理后台直接管理云开发数据库
编程小石头
2025/04/28
1830
vue3直接操作微信小程序云开发数据库,web网页对云数据库进行增删改查
javascript数据库基本操作
数据库是现代信息技术中非常重要的技术,与生活(衣食住行)息息相关,刷饭卡吃饭,淘宝购物、12306购票、刷微信付款其实都是对数据库的基本操作。
周星星9527
2019/08/19
6430
使用 Uniapp + UniCloud 云开发微信小程序获取用户信息(完整版)
小程序作为前端必备技能,在学习过程中会需要让自己建立一个新的框架区域,让自己抛弃掉所用的技术框架:vue、react、angular等。
猿来是前端
2022/09/19
7.7K2
使用 Uniapp + UniCloud 云开发微信小程序获取用户信息(完整版)
【云+社区年度征文】2020年小程序开发-云开发技术总结
2020年注定是不平凡的一年,一场冠状疫情的爆发,让人们突然认识到生命的可贵,人们对生命重新有了新的认识。谱写了太多的悲伤,太多难过,太多的眼泪和辛酸。珍惜当下,敬畏生命,敬畏自然。
达达前端
2020/12/18
2.4K0
【云+社区年度征文】2020年小程序开发-云开发技术总结
【愚公系列】《微信小程序与云开发从入门到实践》047-使用云数据库
在数字化转型的浪潮中,数据的管理与应用已成为企业和开发者关注的核心。微信小程序凭借其便捷的使用体验和广泛的用户基础,逐渐成为各类应用和服务的重要载体。其中,云数据库作为一种高效、灵活的解决方案,为小程序提供了强大的数据存储和管理能力,使得开发者能够专注于业务逻辑的实现,而无需过多担心基础设施的搭建和维护。
愚公搬代码
2025/01/28
2460
unicloud使用云开发每天定时向女朋友发送短信(api获取/数据库固定+情话用完短信警告/自定义情话/晚安)
进入 Dcloud 开发者中心 https://dev.dcloud.net.cn/ 如果没有账号 注册即可
代码哈士奇
2021/10/25
1.6K0
unicloud使用云开发每天定时向女朋友发送短信(api获取/数据库固定+情话用完短信警告/自定义情话/晚安)
颠覆认知!这些小程序云开发技巧,让后端开发难度直降 90%
嘿,各位开发小伙伴们!在这个代码如繁星般闪烁的时代,小程序开发已经成为了咱技术人的 “必争之地”。你是不是还在为小程序后端开发那些复杂的事儿头疼不已?服务器配置、数据库搭建、接口开发…… 每一项都像一座小山,压得人喘不过气来。但是!今天小编要给大家带来一个超级大福利,掌握了这些小程序云开发技巧,后端开发难度瞬间直降 90%,让你轻松跨越这些 “小山”,一路飞奔向前。
小白的大数据之旅
2025/03/18
1040
『云数据库』删除数据
经过上一篇文章的介绍,大家可以了解到如何在微信小程序开发中通过代码的方式来进行操作云数据库,主要分为以下几个步骤:
程序员NEO
2024/01/16
4470
『云数据库』删除数据
微信小程序云开发页面的创建、读取数据
前面说到:微信小程序云开发 初学者入门教程一(云开发环境搭建)https://www.jianshu.com/p/5df4d51125e3,开通环境,部署环境之后,现在开始创建第一个界面。
王小婷
2020/10/29
1.8K0
推荐阅读
相关推荐
unicloud云开发---uniapp云开发(三)---云数据库基础(超详细)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验