uniCloud 云数据库(新建表、增、删、改、查)

news2025/4/8 5:20:52

新建表结构描述文件

在这里插入图片描述

todo 为自定义的表名
在这里插入图片描述
在这里插入图片描述
表结构描述文件的默认后缀为 .schema.json

设置表的操作权限

uniCloud-aliyun/database/todo.schema.json
默认的操作权限都是 false

	"permission": {
		"read": false,
		"create": false,
		"update": false,
		"delete": false
	},

根据需要修改为 true ,即允许读取表中的数据、新增数据、修改数据、删除数据

	"permission": {
		"read": true,
		"create": true,
		"update": true,
		"delete": true
	},

设置表的字段

默认只有字段 _id

	"properties": {
		"_id": {
			"description": "ID,系统自动生成"
		}
	}

此处新增字段 content

	"properties": {
		"_id": {
			"description": "ID,系统自动生成"
		},
		"content": {
			"description": "待办事项"
		}
	}

新建表

将表结构描述文件上传到云服务器,即可完成表的创建

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

增 – 新增数据

async save() {
	// 输入cdb 可快捷生成
	const db = uniCloud.database();
	// 在表 todo 中新增数据 {content: '写日记'}
	let res = await db.collection('todo').add({
		content: '写日记'
	})
	if (res.result.code === 0) {
		uni.showToast({
			title: '新增成功!'
		});
	}
},

批量新增,传入对象数组即可。

.add([{
  name: '张三'
},{
  name: '李四'
},{
  name: '王五'
}])

删 – 删除数据

通过 unicloud-db 组件快捷删除数据

<unicloud-db ref="udb" collection="todo" v-slot:default="{data, loading, error}">
	<view v-if="error">{{error.message}}</view>
	<view v-else-if="loading">正在加载...</view>
	<view v-else>
		<ol>
			<li v-for="item in data">
				{{ item.content}}
				<button @click="del(item._id)">删除</button>
			</li>
		</ol>
	</view>
</unicloud-db>
del(id) {
	this.$refs.udb.remove(id)
},

在这里插入图片描述

改 – 修改数据 update

仅会修改 update 中传入的字段

async edit(item) {
	const db = uniCloud.database();
	let res = await db.collection("todo").where({
			_id: item._id
		})
		.update({
			content: '读书'
		})
	if (res.result.code === 0) {
		uni.showToast({
			title: '修改成功!'
		});
	}
},

修改数组

更新数组时,以数组下标作为key即可

  .update({
    arr: {
      1: "uniCloud"
    }
  })

修改对象

范例 – 更新对象方式一

  .update({
    info: {
      job: "演员"
    }
  })

范例 – 更新对象方式二

  .update({
    'info.job': "演员"
  })

批量修改

批量更新,添加 where 搜索条件即可

.where("name=='hey'").update({
  age: 18,
})

使用操作符实现修改

仅在云函数/云对象中可用!

范例 – push

uniCloud-aliyun/cloudfunctions/edit_todo/index.js

'use strict';
exports.main = async (event, context) => {
	let {
		_id,
		newList
	} = event

	const db = uniCloud.database();
	const dbcmd = db.command
	return db.collection("todo").where({
			_id
		})
		.update({
			tag: dbcmd.push(newList)
		})
};

pages/index/index.vue

async edit(item) {
	uniCloud.callFunction({
			name: 'edit_todo',
			data: {
				_id: item._id,
				newList: ['喝水', '吃饭']
			}
		})
		.then(res => {
			if (res.result.updated) {
				uni.showToast({
					title: '修改成功!'
				});
				this.getList()
			}
		});
},

查 – 读取数据

通过 unicloud-db 组件直接渲染读取的数据

在 collection 属性配置对应的表名即可,如 “todo”

<unicloud-db collection="todo" v-slot:default="{data, loading, error}">
	<view v-if="error">{{error.message}}</view>
	<view v-else-if="loading">正在加载...</view>
	<view v-else>
		<ol>
			<li v-for="item in data">
				{{ item.content}}
			</li>
		</ol>
	</view>
</unicloud-db>

通过 get 获取数据列表

async getList() {
	const db = uniCloud.database();

	let res = await db.collection('todo').get()
	if (res.success) {
		console.log(res.result.data)
	}
},

通过 count 获取总数

async getTotal() {
	const db = uniCloud.database();

	let res = await db.collection('todo').count()
	if (res.success) {
		console.log(res.result.total)
	}
},

通过 doc 获取单条数据

常用于获取目标数据的详情

async getDetail() {
	let id = '65950461bd0220fad3ad39bd'
	const db = uniCloud.database();

	let res = await db.collection('todo').doc(id).get()
	if (res.success) {
		console.log(res.result.data[0])
	}
},

通过 limit 限定数据条数

常和skip一起使用,实现分页查询

async getList() {
	const db = uniCloud.database();

	let res = await db.collection('todo').limit(2).get()
	if (res.success) {
		console.log(res.result.data)
	}
},

通过 skip 限定查询起点

常和 limit 一起使用,实现分页查询

async getList() {
	const db = uniCloud.database();

	let res = await db.collection('todo').skip(1).get()
	if (res.success) {
		console.log(res.result.data)
	}
},

分页查询

移动端的每页条数,建议设定为比内容占满首屏稍多一点即可。

async getList_page() {
	const db = uniCloud.database();

	// 当前页码
	let currentPage = 1
	// 每页条数
	let pageSize = 2

	let res = await db.collection('todo').skip(pageSize * (currentPage - 1)).limit(pageSize).get()
	if (res.success) {
		console.log(res.result.data)
	}
},

通过 orderBy 排序

async getList() {
	const db = uniCloud.database();
	// 按创建时间,倒序排列
	let res = await db.collection('todo').orderBy('createTime', 'desc').get()
	if (res.success) {
		console.log(res.result.data)
	}
},
  • 默认是正序排列 asc

通过 field 限定查询的字段

async getList() {
	const db = uniCloud.database();
	// 仅返回 content 字段
	let res = await db.collection('todo').field({
		content: true
	}).get()
	if (res.success) {
		console.log(res.result.data)
	}
},

通过 where 添加查询条件

单条件

async getList() {
	const db = uniCloud.database();

	let res = await db.collection('todo').where({
		content: '吃饭'
	}).get()
	if (res.success) {
		console.log(res.result.data)
	}
},

多条件

async getList() {
	const db = uniCloud.database();

	let res = await db.collection('todo').where({
		title: '标题1',
		content: '内容1',
	}).get()
	if (res.success) {
		console.log(res.result.data)
	}
},

command 指令实现复杂查询

async getList() {
	const db = uniCloud.database();
	const dbCmd = db.command
	// 查询 score 值为 9 的数据
	let res = await db.collection('todo').where({
		score: dbCmd.eq(9)
	}).get()
	if (res.success) {
		this.list = res.result.data
	}
},

更多指令见下表

在这里插入图片描述
范例 – in

async getList() {
	const db = uniCloud.database();
	const dbCmd = db.command
	// 查询 score 值为 9 或 10 或 11 的数据
	let res = await db.collection('todo').where({
		score: dbCmd.in([9, 10, 11])
	}).get()
	if (res.success) {
		this.list = res.result.data
	}
},

范例 – or 的用法一(and同理)

async getList() {
	const db = uniCloud.database();
	const dbCmd = db.command
	// 查询 score 值为 9 或 20 的数据
	let res = await db.collection('todo').where({
		score: dbCmd.eq(9).or(dbCmd.eq(20))
	}).get()
	if (res.success) {
		this.list = res.result.data
	}
},

范例 – or 的用法二(and同理)

async getList() {
	const db = uniCloud.database();
	const dbCmd = db.command
	// 查询 score 值为 9 或 20 的数据
	let res = await db.collection('todo').where({
		score: dbCmd.or(dbCmd.eq(9), dbCmd.eq(20))
	}).get()
	if (res.success) {
		this.list = res.result.data
	}
},

正则表达式实现模糊查询

async getList() {
	let keyword = '标'
	const db = uniCloud.database();
	let res = await db.collection('todo').where({
		// 查询 title 字段的值中含 keyword的值 的数据
		title: new RegExp(keyword, 'ig')
	}).get()
	if (res.success) {
		this.list = res.result.data
	}
},

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1356272.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

stm32学习总结:5、Proteus8+STM32CubeMX+MDK仿真串口并使用串口打印日志(注意重定向printf到串口打印的问题)

stm32学习总结&#xff1a;5、Proteus8STM32CubeMXMDK仿真串口并使用串口打印日志&#xff08;注意重定向printf到串口打印的问题&#xff09; 文章目录 stm32学习总结&#xff1a;5、Proteus8STM32CubeMXMDK仿真串口并使用串口打印日志&#xff08;注意重定向printf到串口打印…

网工内推 | 事业单位、上市公司网工,五险一金补贴多

01 中科中山药物创新研究院 招聘岗位&#xff1a;网络工程师 职责描述&#xff1a; 1.负责信息化网络数据安全&#xff0c;加固网络安全、渗透测试、风险评估、漏洞扫描、风险管理和风险评估方法。对防火墙、IDS、IPS、蜜罐、防DDOS、VPN等设备的运行管理&#xff1b; 2.负责机…

FPGA——VIVADO生成固化文件,掉电不丢失

VIVADO生成固化文件 (1)加入代码(2)生成bin文件&#xff0c;并且下载 (1)加入代码 设计文件(.xdc)中加入这段代码: set_property CFGBVS VCCO [current_design] set_property CONFIG_VOLTAGE 3.3 [current_design] set_property BITSTREAM.GENERAL.COMPRESS true [current_de…

斯坦福和 Meta学者发现Gemini在常识推理任务中有较强潜力;初学者GPT:Ai和LLM资源

&#x1f989; AI新闻 &#x1f680; 斯坦福和 Meta学者发现Gemini在常识推理任务中有较强潜力 摘要&#xff1a;斯坦福和Meta的学者发表论文为Gemini正名&#xff0c;他们发现之前对Gemini的评估并不能完全捕捉到其真正的常识推理潜力。他们设计了需要跨模态整合常识知识的任…

net8 golang python性能比较

net8正式版出来两个月&#xff0c;现在性能到底如何呢&#xff0c;做个简单的例子和其他语言比较一下&#xff0c;测试内容是查找1000000以内的质数&#xff0c;代码不多&#xff0c;但包含了循环计算和Math库函数调用&#xff0c;直观的看一下语言之间差距是多少&#xff0c;心…

Strict MIME type checking is enforced for module scripts per HTML spec.

目录 前言错误信息如下:前言 最近使用docker打包Nginx和vue 为镜像文件,启动镜像时报错 错误信息如下: index89886.js:1 Failed to load module script: Expected a JavaScript module script but the server responded with a MIME type of "text/html". Stri…

详细解读QLC SSD无效编程问题-3

数据块大小Block Size对无效编程&#xff08;Invalid Programming&#xff09;比率的影响。研究范围内Block Size大小从128 Pages到2048 Pages不等。实验结果显示&#xff0c;随着块大小的增加&#xff0c;无效比率也呈现上升趋势&#xff0c;但增长速率较小。 这种现象的原因…

【visio绘图教程】8分钟教你Visio绘图,Visio绘图使用示例:基本框图

visio安装教程 新建 使用基本框图或者他给的模板 作图 首先在视图勾选网格 不想要自带的样式 不想要颜色 在填充这里选择无填充 不想要阴影在效果里面选 写文字 点击文本 复制可以使用ctrlD 连线 然后在线条里给他一个箭头 或者我们在这里直接使用连接线 然后复…

OpenHarmony—开发环境搭建

背景 因为没有实体的开发硬件&#xff0c;且不想破坏原有的Linux环境&#xff0c;所以这里基于 Docker QEMU 搭建开发环境 宿主机Linux系统命令行方式DockerQEMU 6.2 Docker环境准备 安装Docker 在Ubuntu中&#xff0c;可以使用下面的命令来安装Docker&#xff1a; sudo …

25计算机考研经验贴之准备篇二

Hello各位小伙伴&#xff0c;今天要分享的是 &#xff08;1&#xff09;报班or自学 &#xff08;2&#xff09;考研老师 &#xff08;3&#xff09;网购平台 &#xff08;4&#xff09;平板 【报班or自学】 关于这个问题网友的意见大致分为两类&#xff1a; 一类认为没必要报…

CMake入门教程【核心篇】属性管理set_property和get_property

&#x1f608;「CSDN主页」&#xff1a;传送门 &#x1f608;「Bilibil首页」&#xff1a;传送门 &#x1f608;「本文的内容」&#xff1a;CMake入门教程 &#x1f608;「动动你的小手」&#xff1a;点赞&#x1f44d;收藏⭐️评论&#x1f4dd; 文章目录 1.概述2.设置属性 - …

windows连接ssh并实现上传下载文件

连接ssh 输入&#xff1a;ssh空格用户名ip地址&#xff0c;然后按Enter 有可能出现下图提示&#xff0c;输入yes 回车即可 输入 password &#xff0c;注意密码是不显示的&#xff0c;输入完&#xff0c;再按回车就行了 以上是端口默认22情况下ssh连接&#xff0c;有些公司它…

c jpeg 编码解码验证数据

1. yuv420p 1616 像素点 384字节全部数据 把上面的384个char从左到右&#xff0c;从上到下的顺序输入文件&#xff0c;就能显示红绿蓝白4个水平条

Qt学习_18_用QtMmlWidget实现界面中显示公式

QtMmlWidget是一个Qt类&#xff0c;可用于呈现用MathML 2.0编写的数学公式。 参考页&#xff1a;QtMmlWidget Class Reference (huihoo.com) 一般MathML 2.0编写的数学公式都保存于一个单独的.xml文件当中&#xff0c;然后QtMmlWidget类去读取这个.xml的内容&#xff0c;就可以…

Oracle导出CSV文件

利用spool spool基本格式&#xff1a; spool 路径文件名 select col1||,||col2||,||col3||,||col4 from tablename; spool off spool常用的设置&#xff1a; set colsep ;    //域输出分隔符 set echo off;    //显示start启动的脚本中的每个sql命令&#xff0c;缺…

【数据采集与预处理】数据接入工具Kafka

目录 一、Kafka简介 &#xff08;一&#xff09;消息队列 &#xff08;二&#xff09;什么是Kafka 二、Kafka架构 三、Kafka工作流程分析 &#xff08;一&#xff09;Kafka核心组成 &#xff08;二&#xff09;写入流程 &#xff08;三&#xff09;Zookeeper 存储结构 …

源头厂家定制直线度测量仪 在线与离线检测均可

直线度的检测不再局限于直尺法、重力法等人工检测方式&#xff0c;随着自动化的发展&#xff0c;直线度检测也更需要自动化方便快捷的检测仪器。为此&#xff0c;研发了在线直线度测量仪与离线直线度测量仪&#xff0c;根据不同的需要&#xff0c;选择合适的设备即可。 数据计…

Java集合框架和泛型

1.Java集合框架 架构图&#xff1a; Java的集合框架是一组用于存储和操作数据的类和接口。它提供了各种数据结构&#xff0c;如列表、集合、映射等&#xff0c;以及用于操作这些数据结构的算法和工具。Java集合框架位于Java.util包中&#xff0c;并且是Java编程中常用的核心组…

ROS学习笔记(二):话题通信、服务通信的了解和对应节点的搭建(C++)

ROS学习笔记&#xff08;二&#xff09;&#xff1a;话题通信、服务通信的了解和对应节点的搭建&#xff08;C和Python&#xff09; 前言一、Topics话题通信&#xff08;C&#xff09;0、自定义msg消息类型文件1、发布者&#xff08;Publisher&#xff09;2、订阅者&#xff08…

引导和服务

目录 一、Linux操作系统引导过程 1、引导过程总览图 2、引导过程的详细步骤 二、系统初始化进程 1、init进程&#xff08;串行启动&#xff09; 2、Systemd&#xff08;并行启动&#xff09; 3、Centos6与Centos7的区别&#xff1a; 4、Systemd单元类型 5、运行级别所…