unicloud云开发进阶4-DBschema各种字段属性

222 阅读2分钟

DB Schema的其他属性

这里为了测试,先把读取数据库read改为true,否则不可用,后期也不会直接写true,这样写是没有保护作用的,以后会通过引入uni-id来实现对权限的验证

required必填项,新增时会用

properties用来设置字段类型

里面的_id是系统自动生成的,无需改动

// 文档教程: https://uniapp.dcloud.net.cn/uniCloud/schema
{
	"bsonType": "object",
	"required": [],
	"permission": {
		"read": true,
		"create": false,
		"update": false,
		"delete": false
	},
	"properties": {
		"_id": {
			"description": "ID,系统自动生成"
		}
	}
}

可以通过默认值属性来设置默认值,$env是系统提供的一个全局变量,它的值有三个 image.png

新建一个dbschema表结构

里面创建了四个字段,标题、内容、时间、时间戳 并把读和创建改成true

// 文档教程: https://uniapp.dcloud.net.cn/uniCloud/schema
{
	"bsonType": "object",
	"required": [],
	"permission": {
		"read": true,
		"create": true,
		"update": false,
		"delete": false
	},
	"properties": {
		"_id": {
			"description": "ID,系统自动生成"
		},
    "title":{
      "bsonType": "string",
      // 这个title是属性,上面的title是字段名
      "title": "文章标题",
      // 说明,开发者使用
      "description": "文章的标题"
    },
    "content":{
      "bsonType": "string",
      "title": "内容",
      "description": "文章内容"
    },
    "posttime":{
      // 时间戳类型
      "bsonType": "timestamp",
      "title": "发布时间",
      "description": "文章内容",
      // 文章不通过前端传递,通过系统自动生成
      // 默认值有两个 
      // defaultValue 用户可以覆盖
      // forceDefaultValue 用户不能覆盖
      "defaultValue":{
        "$env": "now"
      }
    },
    // 阅读次数字段
    "hits":{
      "bsonType": "int",
      "title": "阅读量",
      "defaultValue":33
    }
	}
}

接下来在前端向数据库添加一条数据进行测试

<template>
	<view class="content">
		<image class="logo" src="/static/logo.png"></image>
    <button @click="addClick">新增</button>
		<view class="text-area">
			<text class="title">{{title}}</text>
		</view>
	</view>
</template>

<script>
  const db=uniCloud.database();
	export default {
		data() {
			return {
				title: 'Hello'
			}
		},
		onLoad() {
		},
		methods: {
      addClick(){
        db.collection("cloudDemo").add({
          title:"123"
        })
      }
		}
	}
</script>

<style>

</style>

点击按钮后,云数据库中多了刚增加的一条数据 之前在schema中设置的两个默认值:一个时间戳和一个阅读量也有了 image.png

没有写默认值的字段,如果前端没有做判断(理论上前后端都应该对需要有的字段进行校验),直接提交了,也是可以创建出一条数据的,就像上面新建的这一条数据,前端是写了title的,如果不写这个title,创建出来的数据就是下面这样

image.png

对必填字段的校验,就把字段名写在required中,现在把title写到required中之后,再不写title就提交数据控制台会报错

// 文档教程: https://uniapp.dcloud.net.cn/uniCloud/schema
{
	"bsonType": "object",
	"required": ["title"],
	"permission": {
		"read": true,
		"create": true,
		"update": false,
		"delete": false
	},

image.png

在文档中还有一个属性是错误提示errorMessage,可以修改这个提示内容 文档在unicloud \rightarrow 云数据库 \rightarrow DB Schema表结构里面 这个属性值可以传字符串或对象

    "title":{
      "bsonType": "string",
      // 这个title是属性,上面的title是字段名
      "title": "文章标题",
      // 说明,开发者使用
      "description": "文章的标题",
      // 修改报错信息
      "errorMessage":"标题必须填写"
    },

把前端页面之前提交的title值删掉,并在schema中把title设为必填项,然后添加errorMessage错误提示信息,再点新增按钮,浏览器控制台的报错信息如下

image.png