“云开发基础之云数据库”的版本间的差异

来自CloudWiki
跳转至: 导航搜索
(创建页面,内容为“<p><strong>云开发基础之云数据库</strong></p> <p><strong>一、云数据库是什么</strong></p> <p><strong>1.*</strong>*产品介绍**</p> <p> 云…”)
 
讨论 | 贡献
 
(未显示3个用户的6个中间版本)
第1行: 第1行:
<p><strong>云开发基础之云数据库</strong></p>
+
<h1><strong>云开发基础之云数据库</strong></h1>
<p><strong>一、云数据库是什么</strong></p>
+
<h2><strong>一、云数据库是什么</strong></h2>
<p><strong>1.*</strong>*产品介绍**</p>
+
<h3><strong>1.*</strong>*产品介绍**</h3>
 
<p>      云数据库是CloudBase提供的核心功能之一,提供基础读写、聚合搜索、数据库事务、实时推送等功能</p>
 
<p>      云数据库是CloudBase提供的核心功能之一,提供基础读写、聚合搜索、数据库事务、实时推送等功能</p>
<p><strong>2.*</strong>*特性优势**</p>
+
<h3><strong>2.*</strong>*特性优势**</h3>
 
<p>    文档型DB</p>
 
<p>    文档型DB</p>
 
<p>          数据库包含多个近似与JSON数组的集合,数组中的对象是记录,格式为JSON文档</p>
 
<p>          数据库包含多个近似与JSON数组的集合,数组中的对象是记录,格式为JSON文档</p>
第10行: 第10行:
 
<p>    权限控制</p>
 
<p>    权限控制</p>
 
<p>          通过API在客户端和云函数内进行数据操作,安全可靠</p>
 
<p>          通过API在客户端和云函数内进行数据操作,安全可靠</p>
<p><strong>3.*</strong>*基础概念**</p>
+
<h3><strong>3.*</strong>*基础概念**</h3>
 
<p>    记录</p>
 
<p>    记录</p>
 
<p>          云数据库是一种文档型数据库,数据库中的每条记录都是一个类似JSON格式的对象</p>
 
<p>          云数据库是一种文档型数据库,数据库中的每条记录都是一个类似JSON格式的对象</p>
第18行: 第18行:
 
<p>    数据库</p>
 
<p>    数据库</p>
 
<p>          每个云开发环境下有且只有一个数据库实例,数据库实例中,可以创建多个集合</p>
 
<p>          每个云开发环境下有且只有一个数据库实例,数据库实例中,可以创建多个集合</p>
<p><strong>4.*</strong>*数据类型**</p>
+
<h3><strong>4.*</strong>*数据类型**</h3>
 
<p>云开发数据库提供以下几种数据类型:</p>
 
<p>云开发数据库提供以下几种数据类型:</p>
 
<p>      String:字符串</p>
 
<p>      String:字符串</p>
第28行: 第28行:
 
<p>      Date:时间</p>
 
<p>      Date:时间</p>
 
<p>      Null</p>
 
<p>      Null</p>
<p><strong>5.*</strong>*调用方式**</p>
+
<h3><strong>5.*</strong>*调用方式**</h3>
 
<p>    云数据库可以在用户端(如Web网页、小程序、Flutter)内调用,也可以在服务器(如服务器、云函数)内调用</p>
 
<p>    云数据库可以在用户端(如Web网页、小程序、Flutter)内调用,也可以在服务器(如服务器、云函数)内调用</p>
 
<p>    本课程主要介绍如何在web端和云函数端调用云数据库</p>
 
<p>    本课程主要介绍如何在web端和云函数端调用云数据库</p>
第35行: 第35行:
 
<p>云函数端调用</p>
 
<p>云函数端调用</p>
 
<p>    通过云函数端调用时,无需鉴权,直接以管理员身份进行数据库的读写操作</p>
 
<p>    通过云函数端调用时,无需鉴权,直接以管理员身份进行数据库的读写操作</p>
<p><strong>二、云数据库的基础功能</strong></p>
+
<h2><strong>二、云数据库的基础功能</strong></h2>
<p><strong>1.*</strong>*初始化**</p>
+
<h3><strong>1.*</strong>*初始化**</h3>
 
<p>新建第一个集合</p>
 
<p>新建第一个集合</p>
 
<p>    目前仅支持通过云函数端SDK或云开发CloudBase控制台新建集合</p>
 
<p>    目前仅支持通过云函数端SDK或云开发CloudBase控制台新建集合</p>
<p><img src="file:///C:/Users/LoveCj/AppData/Local/Temp/msohtmlclip1/01/clip_image002.jpg" referrerpolicy="no-referrer" alt="img"></p>
+
[[文件:cloud1.png]]
 
<p>&nbsp;</p>
 
<p>&nbsp;</p>
 
<p>获取数据库的引用</p>
 
<p>获取数据库的引用</p>
 
<p>    在开始使用数据库API进行增删改查操作之前,需要先获取数据库的引用db</p>
 
<p>    在开始使用数据库API进行增删改查操作之前,需要先获取数据库的引用db</p>
<p><img src="file:///C:/Users/LoveCj/AppData/Local/Temp/msohtmlclip1/01/clip_image004.jpg" referrerpolicy="no-referrer" alt="img"></p>
+
[[文件:cloud2.png]]
 
<p>&nbsp;</p>
 
<p>&nbsp;</p>
 
<p>获取一个集合的引用</p>
 
<p>获取一个集合的引用</p>
 
<p>    通过Collection方法获取一个集合的引用</p>
 
<p>    通过Collection方法获取一个集合的引用</p>
 
<p>    通过doc方法获取一个文档的引用</p>
 
<p>    通过doc方法获取一个文档的引用</p>
<p><img src="file:///C:/Users/LoveCj/AppData/Local/Temp/msohtmlclip1/01/clip_image006.jpg" referrerpolicy="no-referrer" alt="img"></p>
+
[[文件:cloud3.png]]
 
<p>&nbsp;</p>
 
<p>&nbsp;</p>
<p><strong>2.*</strong>*插入数据**</p>
+
<h3><strong>2.*</strong>*插入数据**</h3>
 
<p>    准备工作</p>
 
<p>    准备工作</p>
 
<p>      假设已经创建了集合todos</p>
 
<p>      假设已经创建了集合todos</p>
 
<p>    插入一条数据</p>
 
<p>    插入一条数据</p>
<p><img src="file:///C:/Users/LoveCj/AppData/Local/Temp/msohtmlclip1/01/clip_image008.jpg" referrerpolicy="no-referrer" alt="img"><img src="file:///C:/Users/LoveCj/AppData/Local/Temp/msohtmlclip1/01/clip_image008.jpg" referrerpolicy="no-referrer" alt="img"></p>
+
[[文件:cloud4.png]]
 
<p>&nbsp;</p>
 
<p>&nbsp;</p>
 
<p>插入多条数据</p>
 
<p>插入多条数据</p>
 
<p>    SDK支持范围:仅支持云函数端</p>
 
<p>    SDK支持范围:仅支持云函数端</p>
<p><img src="file:///C:/Users/LoveCj/AppData/Local/Temp/msohtmlclip1/01/clip_image010.jpg" referrerpolicy="no-referrer" alt="img"></p>
+
[[文件:cloud19.png]]
<p><strong>3.*</strong>*读取数据**</p>
+
<h3><strong>3.*</strong>*读取数据**</h3>
 
<p>准备工作</p>
 
<p>准备工作</p>
 
<p>    假设我们已有一个集合todos,其中包含以下格式文档</p>
 
<p>    假设我们已有一个集合todos,其中包含以下格式文档</p>
<p><img src="file:///C:/Users/LoveCj/AppData/Local/Temp/msohtmlclip1/01/clip_image012.jpg" referrerpolicy="no-referrer" alt="img"></p>
+
[[文件:cloud6.png]]
 
<p>&nbsp;</p>
 
<p>&nbsp;</p>
 
<p>读取一个文档数据</p>
 
<p>读取一个文档数据</p>
<p><img src="file:///C:/Users/LoveCj/AppData/Local/Temp/msohtmlclip1/01/clip_image014.jpg" referrerpolicy="no-referrer" alt="img"></p>
+
[[文件:cloud7.png]]
 
<p>&nbsp;</p>
 
<p>&nbsp;</p>
 
<p>读取多个文档的数据</p>
 
<p>读取多个文档的数据</p>
 
<p>    通过调用集合上的where方法可以指定查询条件,在调用get方法即可只返回满足指定查询条件的记录</p>
 
<p>    通过调用集合上的where方法可以指定查询条件,在调用get方法即可只返回满足指定查询条件的记录</p>
<p><img src="file:///C:/Users/LoveCj/AppData/Local/Temp/msohtmlclip1/01/clip_image016.jpg" referrerpolicy="no-referrer" alt="img"></p>
+
[[文件:cloud8.png]]
 
<p>&nbsp;</p>
 
<p>&nbsp;</p>
<p>查询指令</p>
+
<h4>查询指令</h4>
 
<p>    假设我们需要查询进度大于30%的代办事项,那么传入对象表示全等匹配的方法就无法满足了,这时就需要用到查询指令</p>
 
<p>    假设我们需要查询进度大于30%的代办事项,那么传入对象表示全等匹配的方法就无法满足了,这时就需要用到查询指令</p>
 
<p>    数据库API提供了大于、小于等多种查询指令,这些指令都暴露在db.command对象上</p>
 
<p>    数据库API提供了大于、小于等多种查询指令,这些指令都暴露在db.command对象上</p>
<p><img src="file:///C:/Users/LoveCj/AppData/Local/Temp/msohtmlclip1/01/clip_image018.jpg" referrerpolicy="no-referrer" alt="img"></p>
+
[[文件:cloud9.png]]
 
<p>&nbsp;</p>
 
<p>&nbsp;</p>
<p>逻辑指令</p>
+
<h4>逻辑指令</h4>
 
<p>    SDK支持范围:Web端和云函数端</p>
 
<p>    SDK支持范围:Web端和云函数端</p>
 
<p>    除了指定一个字段满足一个条件之外,我们还可以指定一个字段需同时满足多个条件,例如我们查询进度小于或等于50%或颜色为白色或黄色的代办事项</p>
 
<p>    除了指定一个字段满足一个条件之外,我们还可以指定一个字段需同时满足多个条件,例如我们查询进度小于或等于50%或颜色为白色或黄色的代办事项</p>
 
<p>    具体的查询指令API文档可参考各SDK API参考</p>
 
<p>    具体的查询指令API文档可参考各SDK API参考</p>
<p><img src="file:///C:/Users/LoveCj/AppData/Local/Temp/msohtmlclip1/01/clip_image020.jpg" referrerpolicy="no-referrer" alt="img"></p>
+
[[文件:cloud10.png]]
<p><strong>4.*</strong>*更新数据**</p>
+
<h3><strong>4.*</strong>*更新数据**</h3>
 
<p>更新数据主要有两个方法</p>
 
<p>更新数据主要有两个方法</p>
 
<p>      update:局部更新一个或多个记录</p>
 
<p>      update:局部更新一个或多个记录</p>
第88行: 第88行:
 
<p>    使用update方法可以局部更新一个记录或一个集合中的记录,局部更新意味着只有指定的字段会得到更新,其他字段不会受影响</p>
 
<p>    使用update方法可以局部更新一个记录或一个集合中的记录,局部更新意味着只有指定的字段会得到更新,其他字段不会受影响</p>
 
<p>    例如我们可以以用以下代码将一个待办事项设置为已完成</p>
 
<p>    例如我们可以以用以下代码将一个待办事项设置为已完成</p>
<p><img src="file:///C:/Users/LoveCj/AppData/Local/Temp/msohtmlclip1/01/clip_image022.jpg" referrerpolicy="no-referrer" alt="img"></p>
+
[[文件:cloud11.png]]
 
<p>&nbsp;</p>
 
<p>&nbsp;</p>
<p>批量跟新</p>
+
<h4>批量跟新</h4>
 
<p>    通过where().update()可以找到符合查询条件的文档列表,并进行更新</p>
 
<p>    通过where().update()可以找到符合查询条件的文档列表,并进行更新</p>
<p><img src="file:///C:/Users/LoveCj/AppData/Local/Temp/msohtmlclip1/01/clip_image024.jpg" referrerpolicy="no-referrer" alt="img"></p>
+
[[文件:cloud12.png]]
 
<p>&nbsp;</p>
 
<p>&nbsp;</p>
<p>代替更新</p>
+
<h4>代替更新</h4>
 
<p>    如果需要替换更新一条记录,可以在记录上使用set方法,替换更新意味着用传入的对象替换指定的记录</p>
 
<p>    如果需要替换更新一条记录,可以在记录上使用set方法,替换更新意味着用传入的对象替换指定的记录</p>
<p><img src="file:///C:/Users/LoveCj/AppData/Local/Temp/msohtmlclip1/01/clip_image026.jpg" referrerpolicy="no-referrer" alt="img"></p>
+
[[文件:cloud13.png]]
 
<p>&nbsp;</p>
 
<p>&nbsp;</p>
<p><strong>5.*</strong>*删除数据**</p>
+
<h3><strong>5.*</strong>*删除数据**</h3>
 
<p>删除一条记录s</p>
 
<p>删除一条记录s</p>
 
<p>    对记录使用remove方法可以删除该条记录</p>
 
<p>    对记录使用remove方法可以删除该条记录</p>
 
<p>    客户端上只能删除符合权限的数据</p>
 
<p>    客户端上只能删除符合权限的数据</p>
<p><img src="file:///C:/Users/LoveCj/AppData/Local/Temp/msohtmlclip1/01/clip_image028.jpg" referrerpolicy="no-referrer" alt="img"></p>
+
[[文件:cloud14.png]]
 
<p>删除多条记录</p>
 
<p>删除多条记录</p>
 
<p>    如果需要删除多个数据,可以通过where语句选取多条记录执行删除</p>
 
<p>    如果需要删除多个数据,可以通过where语句选取多条记录执行删除</p>
 
<p>    客户端上只能删除符合权限的数据</p>
 
<p>    客户端上只能删除符合权限的数据</p>
<p><img src="file:///C:/Users/LoveCj/AppData/Local/Temp/msohtmlclip1/01/clip_image030.jpg" referrerpolicy="no-referrer" alt="img"></p>
+
[[文件:cloud15.png]]
<p><strong>三、云数据库的高级功能</strong></p>
+
<h2><strong>三、云数据库的高级功能</strong></h2>
<p><strong>1.*</strong>*聚合搜索**</p>
+
<h3><strong>1.*</strong>*聚合搜索**</h3>
 
<p>介绍</p>
 
<p>介绍</p>
 
<p>    聚合主要用来处理数据(统计平均值,求和等)并返回计算后的数据结果</p>
 
<p>    聚合主要用来处理数据(统计平均值,求和等)并返回计算后的数据结果</p>
第117行: 第117行:
 
<p>      第一阶段:match阶段过滤了集合中的文档数据(sailing:true表示找出正在出售的书籍)并传给下一阶段</p>
 
<p>      第一阶段:match阶段过滤了集合中的文档数据(sailing:true表示找出正在出售的书籍)并传给下一阶段</p>
 
<p>    第二阶段:group阶段基于category字段进行分组,并统计处每组中所有记录的sales字段平均值</p>
 
<p>    第二阶段:group阶段基于category字段进行分组,并统计处每组中所有记录的sales字段平均值</p>
<p><img src="file:///C:/Users/LoveCj/AppData/Local/Temp/msohtmlclip1/01/clip_image032.jpg" referrerpolicy="no-referrer" alt="img"></p>
+
[[文件:cloud16.png]]
<p><strong>2.*</strong>*实时推送**</p>
+
<h3><strong>2.*</strong>*实时推送**</h3>
 
<p>    介绍</p>
 
<p>    介绍</p>
 
<p>      云开发数据库支持监听集合中符合查询条件的数据的更新事件</p>
 
<p>      云开发数据库支持监听集合中符合查询条件的数据的更新事件</p>
第127行: 第127行:
 
<p>关闭监听  </p>
 
<p>关闭监听  </p>
 
<p>    调用watcher.close即可关闭监听</p>
 
<p>    调用watcher.close即可关闭监听</p>
<p><img src="file:///C:/Users/LoveCj/AppData/Local/Temp/msohtmlclip1/01/clip_image034.jpg" referrerpolicy="no-referrer" alt="img"></p>
+
[[文件:cloud17.png]]
 
<p>&nbsp;</p>
 
<p>&nbsp;</p>
<p><strong>四、云数据库的控制台管理操作</strong></p>
+
<h2><strong>四、云数据库的控制台管理操作</strong></h2>
<p><strong>1.*</strong>*设置数据库权限**</p>
+
<h3><strong>1.*</strong>*设置数据库权限**</h3>
 
<p>    可以在云开发ColudBase控制台针对没个集合设置对应的权限</p>
 
<p>    可以在云开发ColudBase控制台针对没个集合设置对应的权限</p>
<p><img src="file:///C:/Users/LoveCj/AppData/Local/Temp/msohtmlclip1/01/clip_image036.jpg" referrerpolicy="no-referrer" alt="img"></p>
+
[[文件:cloud18.png]]
 
<p>&nbsp;</p>
 
<p>&nbsp;</p>
<p><strong>2.*</strong>*索引管理**</p>
+
<h3><strong>2.*</strong>*索引管理**</h3>
 
<p>操作步骤</p>
 
<p>操作步骤</p>
 
<p>    进入云开发CloudBase控制台</p>
 
<p>    进入云开发CloudBase控制台</p>
 
<p>    切换到【数据库】标签页,并选择需要导入数据的集合,进入索引管理tab页</p>
 
<p>    切换到【数据库】标签页,并选择需要导入数据的集合,进入索引管理tab页</p>
 
<p>删除or新建索引</p>
 
<p>删除or新建索引</p>
<p><strong>3.*</strong>*导入导出数据**</p>
+
<p>&nbsp;</p>
 +
<h3><strong>3.*</strong>*导入导出数据**</h3>
 
<p>导入数据</p>
 
<p>导入数据</p>
 
<p>    进入云开发CloudBase控制台</p>
 
<p>    进入云开发CloudBase控制台</p>

2020年9月11日 (五) 02:16的最新版本

云开发基础之云数据库

一、云数据库是什么

1.**产品介绍**

云数据库是CloudBase提供的核心功能之一,提供基础读写、聚合搜索、数据库事务、实时推送等功能

2.**特性优势**

文档型DB

数据库包含多个近似与JSON数组的集合,数组中的对象是记录,格式为JSON文档

简单易用

数据库API包含增删改查,操作简单;支持触发器,满足特殊场景

权限控制

通过API在客户端和云函数内进行数据操作,安全可靠

3.**基础概念**

记录

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

集合(collection)

集合由多条记录组成,任何记录必须从属于某个集合

集合是读写操作的主要对象,每个集合都有一个集合名,如users、articles等

数据库

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

4.**数据类型**

云开发数据库提供以下几种数据类型:

String:字符串

Number:数字

Object:对象

Array:数组

Bool:布尔值

GeoPoint:地理位置点

Date:时间

Null

5.**调用方式**

云数据库可以在用户端(如Web网页、小程序、Flutter)内调用,也可以在服务器(如服务器、云函数)内调用

本课程主要介绍如何在web端和云函数端调用云数据库

Web端调用

通过Web端调用时,需要先进性云开发的登录鉴权,然后以用户的身份进行数据库的读写操作

云函数端调用

通过云函数端调用时,无需鉴权,直接以管理员身份进行数据库的读写操作

二、云数据库的基础功能

1.**初始化**

新建第一个集合

目前仅支持通过云函数端SDK或云开发CloudBase控制台新建集合

Cloud1.png

 

获取数据库的引用

在开始使用数据库API进行增删改查操作之前,需要先获取数据库的引用db

Cloud2.png

 

获取一个集合的引用

通过Collection方法获取一个集合的引用

通过doc方法获取一个文档的引用

Cloud3.png

 

2.**插入数据**

准备工作

假设已经创建了集合todos

插入一条数据

Cloud4.png

 

插入多条数据

SDK支持范围:仅支持云函数端

Cloud19.png

3.**读取数据**

准备工作

假设我们已有一个集合todos,其中包含以下格式文档

Cloud6.png

 

读取一个文档数据

Cloud7.png

 

读取多个文档的数据

通过调用集合上的where方法可以指定查询条件,在调用get方法即可只返回满足指定查询条件的记录

Cloud8.png

 

查询指令

假设我们需要查询进度大于30%的代办事项,那么传入对象表示全等匹配的方法就无法满足了,这时就需要用到查询指令

数据库API提供了大于、小于等多种查询指令,这些指令都暴露在db.command对象上

Cloud9.png

 

逻辑指令

SDK支持范围:Web端和云函数端

除了指定一个字段满足一个条件之外,我们还可以指定一个字段需同时满足多个条件,例如我们查询进度小于或等于50%或颜色为白色或黄色的代办事项

具体的查询指令API文档可参考各SDK API参考

Cloud10.png

4.**更新数据**

更新数据主要有两个方法

update:局部更新一个或多个记录

set:替换更新一个记录

局部更新

使用update方法可以局部更新一个记录或一个集合中的记录,局部更新意味着只有指定的字段会得到更新,其他字段不会受影响

例如我们可以以用以下代码将一个待办事项设置为已完成

Cloud11.png

 

批量跟新

通过where().update()可以找到符合查询条件的文档列表,并进行更新

Cloud12.png

 

代替更新

如果需要替换更新一条记录,可以在记录上使用set方法,替换更新意味着用传入的对象替换指定的记录

Cloud13.png

 

5.**删除数据**

删除一条记录s

对记录使用remove方法可以删除该条记录

客户端上只能删除符合权限的数据

Cloud14.png

删除多条记录

如果需要删除多个数据,可以通过where语句选取多条记录执行删除

客户端上只能删除符合权限的数据

Cloud15.png

三、云数据库的高级功能

1.**聚合搜索**

介绍

聚合主要用来处理数据(统计平均值,求和等)并返回计算后的数据结果

流水线/管道

聚合是一个流水线式的批处作业,初始文档经过多个阶段的流水线处理后,得到转换后的聚合结果

示例

如右图示例:

第一阶段:match阶段过滤了集合中的文档数据(sailing:true表示找出正在出售的书籍)并传给下一阶段

第二阶段:group阶段基于category字段进行分组,并统计处每组中所有记录的sales字段平均值

Cloud16.png

2.**实时推送**

介绍

云开发数据库支持监听集合中符合查询条件的数据的更新事件

SDK支持范围:仅支持Web端

建立监听

使用watch方法即可建立监听,并且返回wathcer对象,用于关闭监听

符合条件的文档有任何变化,都会出发onChange回调

关闭监听

调用watcher.close即可关闭监听

Cloud17.png

 

四、云数据库的控制台管理操作

1.**设置数据库权限**

可以在云开发ColudBase控制台针对没个集合设置对应的权限

Cloud18.png

 

2.**索引管理**

操作步骤

进入云开发CloudBase控制台

切换到【数据库】标签页,并选择需要导入数据的集合,进入索引管理tab页

删除or新建索引

 

3.**导入导出数据**

导入数据

进入云开发CloudBase控制台

切换到【数据库】标签页,并选择需要导入数据的集合,单击【导入】

选择要导入文件的格式以及冲突处理模式,单机【导入】,即可开始导入的过程