管理数据库
设置权限
您可以在云开发 CloudBase 控制台针对每个集合设置对应的权限。
数据库权限详情参考权限控制。
索引管理
在集合中为查询条件的字段建立索引,是保证数据库性能、提升用户体验的重要手段。
操作步骤
- 进入 云开发 CloudBase 控制台。
- 切换到「数据库」标签页,并选择需要导入数据的集合,进入索引管理 tab 页。
- 删除 or 新建索引。
单字段索引
您可以为查询条件对应的字段创建单字段索引,如果该字段是嵌套字段,可以使用 "点表示法" 。例如对如下格式的记录中的 color 字段进行索引时,可以用 style.color 表示。
{
"_id": "",
"style": {
"color": ""
}
}
在设置单字段索引时,可任意指定索引的排序为升序或降序,数据库总能在对索引字段的排序查询中,进行正确的排序。
组合索引
组合索引即一个索引包含多个字段。当查询条件使用的字段包含在索引定义的所有字段或前缀字段里时,会命中索引,优化查询性能。
索引前缀即组合索引的字段中定义的前 1 到多个字段,例如对集合 students 中 name, age, score 三个字段按顺序定义了组合索引,那么该索引的前缀包含
- name
- name, age
能命中索引的查询字段组合包含
- name
- name, age
- name, age, score
{
"_id": "1",
"name": "luke",
"age": 26,
"score": 80
}
组合索引具有以下特点:
字段顺序决定组合索引效果
例如定义组合索引分别为 name, age 与 age, name 是不同的。当组合索引为 name, age 时,其索引前缀为 name, 对字段 name 的查询可以命中 name, age 索引, 而对字段 age 的查询无法命中该索引,因为 age 不属于 name, age 的前缀(反之字段 age 能命中 age, name 索引)。
查询字段排序影响命中索引
组合索引为 age: 升序, score: 降序,字段排序对索引命中效果如下:
age: 升序, score: 降序 | age: 降序, score: 升序 | age: 升序, score: 升序 | age: 降序, score: 降序 | score: 升序/降序, age: 升序/降序 |
---|---|---|---|---|
命中 | 命中 | 未命中 | 未命中 | 未命中 |
组合索引为 age: 升序, score: 升序,字段排序对索引命中效果如下:
age: 升序, score: 升序 | age: 降序, score: 降序 | age: 升序, score: 降序 | age: 降序, score: 升序 | score: 升序/降序, age: 升序/降序 |
---|---|---|---|---|
命中 | 命中 | 未命中 | 未命中 | 未命中 |
地理位置索引
云开发目前支持建立平面几何的地理位置索引,使用地理位置查询功能时,必须为地理位置数据的字段建立地理位置索引。
例如对含地理位置字段 point 的集合建立地理位置索引:
{
"_id": "",
"point": new db.Geo.Point(50, 50)
}
索引使用注意事项
唯一性限制
创建索引时,索引属性选择唯一,即可添加唯一性限制。此限制会要求集合中索引字段对应的值不能重复。
例如,某个集合内建立了索引字段 foo
,且属性为“唯一”,那么在这个集合内,要求不能存在 foo
字段相同的文档。
需特别注意的是,假如记录中不存在某个字段,则对索引字段来说其值默认为 null。如果索引有唯一性限制,则不允许存在两个或以上的该字段为空 / 不存在该字段的记录。
大小限制
- 索引的字段大小限制不能超过 1024 字节。
- 添加索引时,如果集合中已有文档索引字段超过 1024 字节,添加索引时将报错。
- 已设置索引的字段,如果插入一个文档,文档中该字段超过 1024 字节将会报错。
每个英文字母(不分大小写)占一字节的空间,每个中文汉字占两字节的空间。
正则表达式
正则查询无法使用索引提升性能。
导入数据
云开发支持在云开发 CloudBase 控制台进行数据导入。
操作步骤
- 进入 云开发 CloudBase 控制台。
- 切换到「数据库」标签页,并选择需要导入数据的集合,单击「导入」。
- 选择要导入文件的格式以及冲突处理模式,单击「导入」,即可开始导入的过程。
目前提供了 Insert、Upsert 两种冲突处理模式。
- Insert 模式会在导入时总是插入新记录。
- Upsert 模式会判断有无该条记录,如果有则更新记录,否则就插入一条新记录。
JSON、CSV 文件必须是 UTF-8 的编码格式,且其内容类似 MongoDB 的导出格式,示例代码如下: JSON 示例:
{
"_id": "xxxxxx",
"age": 45
}
{
"_id": "yyyyyy",
"age": 21
}
CSV 示例:
_id, age
xxxxxx, 45
yyyyyy, 21
- JSON 数据不是数组,而是类似 JSON Lines,即各个记录对象之间使用 \n 分隔,而非逗号。
- JSON 数据每个键值对的键名首尾不能是 . ,例如 ".a"、"abc.",且不能包含多个连续的 . ,例如 "a..b"。
- 键名不能重复,且不能有歧义,例如 {"a": 1, "a": 2} 或 {"a": {"b": 1}, "a.b": 2}。
- 时间格式须为 ISODate 格式,例如 "date": { "\$date" : "2018-08-31T17:30:00.882Z" }。
- 当使用 Insert 冲突处理模式时,同一文件不能存在重复的 _id 字段,或与数据库已有记录相同的 _id 字段。
- CSV 格式的数据默认以第一行作为导入后的所有键名,余下的每一行则是与首行键名一一对应的键值记录。
导入完成后,您可以在提示信息中看到本次导入记录的情况。
导出数据
云开发支持在云开发 CloudBase 控制台导出集合已有的数据(目前仅支持导出 CSV、JSON 格式的文件数据)
操作步骤
- 进入云开发 CloudBase 控制台。
- 切换到「数据库」标签页,并选择需要导出数据的集合,单击「导出」。
- 选择要导出的格式、保存的位置、以及字段,单击「导出」,即可开始导出的过程。
- 当选择导出格式为 JSON 时,若不填写字段项,则默认导出所有数据。
- 当选择导出格式为 CSV 时,则字段为必填项。字段之间使用英文逗号隔开。
字段示例代码如下所示:
_id, name, age, gender;