本节中的内容来自对uniCloud官方文档的重新梳理,为了让本课程的学习曲线更加平缓,仅保留我认为对本课程有用的部分。
uniCloud
是nosql非关系型数据库,提供了一个JSON格式的文档型数据库。数据库中每条记录都是一个JSON格式的文档。如果你之前熟悉sql关系型数据库,那么两者部分概念的对应关系如下
关系型 | JSON 文档型 |
---|---|
数据库 database | 数据库 database |
表 table | 集合 collection。但行业里也经常称之为“表”。无需特意区分 |
行 row | 记录 doc |
字段 column | 字段 field |
使用sql语法操作 | 使用MongoDB语法或jql操作 |
一个uniCloud
服务空间,有且只有一个数据库。一个数据库可以有多个集合。一个集合可以有多条记录。每条记录可以有多个字段。
举例说明,数据库中有一个集合名为users,用于存放用户信息。该集合的数据内容如下
{"_id":"622579524331570001ec2fbe","name":"张三","tel":"13900000000"}
{"_id":"62257f511e3fed0001485e9b","name":"李四"}
上述数据中,每行数据表示一个用户的信息,被称之为“记录(doc)”。name
和tel
称之为“字段(field)”。而“13900000000”则是第一条记录的字段tel
的值。_id
是该条数据由系统自动生成的id。
和关系型数据库相比,JSON文档数据库非常灵活,用户李四的数据可以没有
tel
字段
记录内的字段基础数据类型有以下几种:
大部分数据类型有JS基础的同学一看就明白,个别少见的我们会在后面的实战中用上就能学会,这里不再赘述。
所谓索引,是指在数据表的众多字段中挑选一个或多个字段,让数据库引擎优先处理这些字段。设置为索引的字段,在通过该字段查询记录时可以获得更快的查询速度。但设置过多索引也不合适,会造成数据新增和删除变慢。
_id
就是唯一型索引。举例说明:假使数据集合中有2条记录的name字段值都是“张三”,那么他们在user数据表里的区分就是依靠不同的_id
来区分。如果我们要根据name字段来查询,为了提升查询速度,就可以把name字段设为非唯一索引。
在web控制台添加上述索引
注意
uniCloud云数据库既支持通过云函数操作,也支持在前端来操作,但前端操作时会收到一部分限制,后面会有专门写一篇前端操作数据库的教程,本文仅向大家介绍云函数中操作云数据库的方法。
const db = uniCloud.database();
const db = uniCloud.database();
db.collection("users");
在这个数据集合对象上我们可以进行以下操作
调用集合对象的add
方法,给某数据表新增数据记录时,如果该数据表不存在,会自动创建该数据表。如下代码给users集合新增了一条数据,如果users集合不存在,会自动创建。
const db = uniCloud.database();
db.collection("users").add({name: 'Ben'})
const db = uniCloud.database();
db.collection("users").count();
/*count返回的数据结构
{
affectedDocs,//受影响的项目数量
total//统计到的总数
}
*/
const db = uniCloud.database();
db.collection("users").get();
/*get返回的数据结构
{
affectedDocs,//受影响的项目数量
data//获取到的记录的数组
}
*/
_id
对应的记录docconst db = uniCloud.database();
db.collection("users").doc('622579524331570001ec2fbe').get();
/*get返回的数据结构
{
affectedDocs:1,//受影响的项目数量
data//获取到的记录的数组
}
*/
通过指定条件查询筛选出匹配的记录,可搭配查询筛选指令使用
const db = uniCloud.database();
//查询users集合内所有name字段等于张三的记录
db.collection("users").where({
name:"张三"
}).get();
where
还可以使用正则表达式来查询文档,比如
db.collection('user').where({
name: new RegExp('^ABC')//查询所有name字段以ABC开头的用户
})
以下指令挂载在 db.command
下
类型 | 接口 | 说明 |
---|---|---|
比较运算 | eq | 字段等于 == |
neq | 字段不等于 != | |
gt | 字段大于 > | |
gte | 字段大于等于 >= | |
lt | 字段小于 < | |
lte | 字段小于等于 <= | |
in | 字段值在数组里 | |
nin | 字段值不在数组里 | |
逻辑运算 | and | 表示需同时满足指定的所有条件 |
or | 表示需同时满足指定条件中的至少一个 |
const db = uniCloud.database();
//获取users集合内的从第5条起的所有数据
db.collection("users").skip(4).get();
const db = uniCloud.database();
//获取users集合内的所有数据,返回的数据按照createtime字段的值由大到小排列
db.collection("users").orderBy("createtime","desc").get();
如果需要对嵌套字段排序,可以用 "点表示法" 连接嵌套字段,比如 style.color 表示字段 style 里的嵌套字段 color。同时也支持按多个字段排序,可多次调用 orderBy ,多字段排序时的顺序会按照 orderBy 调用顺序先后对多个字段排序。
const db = uniCloud.database();
//获取users集合内的10条数据
db.collection("users").limit(10).get();
const db = uniCloud.database();
//获取users集合内的数据,返回数据只包含name字段
db.collection("users").field({
name:true //
}).get();
注意
使用更新记录函数时可配合更新指令使用。局部更新记录只更新传入的字段。如果被更新的记录不存在,会直接返回更新失败。
const db = uniCloud.database();
//原记录
/*
{
_id:"622579524331570001ec2fbe",
name:"李四"
}
*/
db.collection("users").doc('622579524331570001ec2fbe')
.update({
"name":"李小四"
});
//更新后
/*
{
_id:"622579524331570001ec2fbe",
name:"李小四"
}
*/
配合where使用
//更新user集合中所有name字段为李四的记录,将字段值李四改为李小四
db.collection("users").where({
"name":"李四"
})
.update({
"name":"李小四"
});
以下指令挂载在 db.command
下
类型 | 接口 | 说明 |
---|---|---|
字段 | set | 设置字段值 |
remove | 删除字段 | |
inc | 加一个数值,原子自增 | |
mul | 乘一个数值,原子自乘 | |
push | 数组类型字段追加尾元素,支持数组 | |
pop | 数组类型字段删除尾元素,支持数组 | |
shift | 数组类型字段删除头元素,支持数组 | |
unshift | 数组类型字段追加头元素,支持数组 |
set会删除操作的记录中的所有字段,创建传入的字段。如果操作的记录不存在,会自动创建新的记录。
const db = uniCloud.database();
//原记录
/*
{
_id:"622579524331570001ec2fbe",
name:"李四"
}
*/
db.collection("users").doc('622579524331570001ec2fbe')
.set({
"gender":"男"
});
//更新后
/*
{
_id:"622579524331570001ec2fbe",
gender:"男"
}
*/
const db = uniCloud.database();
db.collection("users").doc('622579524331570001ec2fbe').remove();
这可能是很多前端刚入门小伙伴们第一次接触到操作数据库,知识点有点多。不过,不用特别在意,本文就当做在脑海里植入一个印象,我们会在稍后的实战中真正的熟悉它们,并且在后面的实战训练中越来越熟练掌握它们。
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有