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

新建表结构描述文件

在这里插入图片描述

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} = eventconst db = uniCloud.database();const dbcmd = db.commandreturn 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 = 2let 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.rhkb.cn/news/230704.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【熔断限流组件resilience4j和hystrix】

文章目录 &#x1f50a;博主介绍&#x1f964;本文内容起因resilience4j落地实现pom.xml依赖application.yml配置接口使用 hystrix 落地实现pom.xml依赖启动类上添加注解接口上使用 &#x1f4e2;文章总结&#x1f4e5;博主目标 &#x1f50a;博主介绍 &#x1f31f;我是廖志伟…

华为HCIE-Datacom课程介绍

厦门微思网络HCIE-Datacom课程介绍 一、认证简介 HCIE-Datacom&#xff08;Huawei Certified ICT Expert-Datacom&#xff09;认证是华为认证体系中的顶级认证&#xff0c;HCIE-Datacom认证定位具备坚实的企业网络跨场景融合解决方案理论知识&#xff0c;能够使用华为数通产品…

C语言-环境搭建

文章目录 内容Notepad的安装gcc编译工具的配置 编写软件的安装&#xff1a;软件传送门&#xff1a;Notepad软件选择一个合适的路径&#xff0c;一键傻瓜式安装即可 编译工具gcc在windows环境下的配置&#xff1a;解压gcc编辑工具包解压出来的mingw64文件放到一个合适的磁盘路径…

从0到1入门C++编程——03 内存分区、引用、函数高级应用

文章目录 一、内存分区二、引用三、函数的高级应用1.默认参数2.占位参数3.函数重载 一、内存分区 C程序在执行时&#xff0c;会将内存大致分为4个区&#xff0c;分别是代码区、全局区、栈区和堆区。 代码区用来存放函数体和二进制代码&#xff0c;由操作系统进行管理。 全局区…

Kubernetes-网络

一. 前言 flannel两种容器跨主机通信的方案&#xff0c;其中UDP模式是IP in UDP&#xff0c;即三层报文封装在UDP数据包中通信&#xff1b;而vxlan模式则是MAC in UDP&#xff0c;即二层报文封装在UDP数据包中通信 flannel UDP模式和vxlan模式都对数据包做了封解包&#xff0c…

为什么我不建议大学生接公司单?

大家好&#xff0c;我是鱼皮。前两天&#xff0c;我 编程导航 的鱼友提了个问&#xff1a;大学生怎么接公司的单赚点零花钱&#xff1f; 然后我很认真地评论了一句&#xff1a;我不建议大学生接公司单。 这位小伙伴很认真&#xff0c;又通过微信单独问我&#xff1a; 想了想&am…

Mybatis行为配置之Ⅰ—缓存

专栏精选 引入Mybatis Mybatis的快速入门 Mybatis的增删改查扩展功能说明 mapper映射的参数和结果 Mybatis复杂类型的结果映射 Mybatis基于注解的结果映射 Mybatis枚举类型处理和类型处理器 再谈动态SQL Mybatis配置入门 Mybatis行为配置之Ⅰ—缓存 Mybatis行为配置…

【Midjourney】AI绘画新手教程(一)登录和创建服务器,生成第一幅画作

一、登录Discord 1、访问Discord官网 使用柯學尚网&#xff08;亲测非必须&#xff0c;可加快响应速度&#xff09;访问Discord官方网址&#xff1a;https://discord.com 选择“在您的浏览器中打开Discord” 然后&#xff0c;注册帐号、购买套餐等&#xff0c;在此不做缀述。…

3D目标检测(教程+代码)

随着计算机视觉技术的不断发展&#xff0c;3D目标检测成为了一个备受关注的研究领域。与传统的2D目标检测相比&#xff0c;3D目标检测可以在三维空间中对物体进行定位和识别&#xff0c;具有更高的准确性和适用性。本文将介绍3D目标检测的相关概念、方法和代码实现。 一、3D目…

Python消消乐小游戏(PyGame)

文章目录 写在前面喜羊羊与灰太狼PyGame入门消消乐注意事项写在后面 写在前面 本期内容&#xff1a;基于pygame实现喜羊羊与灰太狼版消消乐小游戏 实验环境 python3.11及以上pycharmpygame 安装pygame的命令&#xff1a; pip install -i https://pypi.tuna.tsinghua.edu.c…

Redis (三)

1、redis复制 简单的概括就是主从复制&#xff0c;master以写为主&#xff0c;Slave以读为主&#xff0c;当master数据发生变化的时候&#xff0c;自动将更新的数据异步同步到其他的slave是数据库。 使用这种机制的话&#xff0c;可以做到读写分离&#xff0c;可以减轻主机负担…

chromium在中文用户名下无法编译的问题

新电脑没有太注意&#xff0c;起用户名的时候用了中文。 在编译chromium104的代码时&#xff0c;因为环境变量有中文导致编译失败&#xff1a; 因为我的电脑默认是使用gbk编码&#xff0c;而不是utf-8编码。 这个问题有三种解决办法&#xff1a; &#xff08;一&#xff09;把…

CMake入门教程【核心篇】添加依赖(add_dependencies)

&#x1f608;「CSDN主页」&#xff1a;传送门 &#x1f608;「Bilibil首页」&#xff1a;传送门 &#x1f608;「本文的内容」&#xff1a;CMake入门教程 &#x1f608;「动动你的小手」&#xff1a;点赞&#x1f44d;收藏⭐️评论&#x1f4dd; 文章目录 1. 基本用法2. 添加目…

DBA技术栈(二):MySQL 存储引擎

2.1 MySQL存储引擎概述 上个业余的图&#xff1a; MyISAM 存储引擎是 MySQL 默认的存储引擎&#xff0c;也是目前 MySQL 使用最为广泛的存储引擎之一。他的前身就是我们在 MySQL 发展历程中所提到的 ISAM&#xff0c;是 ISAM 的升级版本。在 MySQL最开始发行的时候是 ISAM 存…

【LMM 008】Instruction Tuning with GPT-4

论文标题&#xff1a;Instruction Tuning with GPT-4 论文作者&#xff1a;Baolin Peng, Chunyuan Li, Pengcheng He, Michel Galley, Jianfeng Gao 作者单位&#xff1a;Microsoft Research 论文原文&#xff1a;https://arxiv.org/abs/2304.03277 论文出处&#xff1a;– 论文…

在Ubuntu22.04上部署Stable Diffusion

在AI绘画软件领域Stable-Diffusion&#xff08;简称SD&#xff09;在开源领域绝对是不二之选&#xff0c;他的插件方式可以让此软件具有更多的功能&#xff0c;开发者社群为此提供了大量免费高质量的外接预训练模型&#xff08;fine-tune&#xff09;和插件&#xff0c;并持续维…

旋转图像(LeetCode 48)

文章目录 1.问题描述2.难度等级3.热门指数4.解题思路参考文献 1.问题描述 给定一个 n n 的二维矩阵 matrix 表示一个图像。请你将图像顺时针旋转 90 度。 你必须在「原地」旋转图像&#xff0c;这意味着你需要直接修改输入的二维矩阵。请不要使用另一个矩阵来旋转图像。 示…

网络安全—模拟ARP欺骗

文章目录 网络拓扑安装使用编辑数据包客户机攻击机验证 仅做实验用途&#xff0c;禁止做违法犯罪的事情&#xff0c;后果自负。当然现在的计算机多无法被欺骗了&#xff0c;开了防火墙ARP欺骗根本无效。 网络拓扑 均使用Windows Server 2003系统 相关配置可以点击观看这篇文章…

Android开发中“真正”的仓库模式

原文地址&#xff1a;https://proandroiddev.com/the-real-repository-pattern-in-android-efba8662b754原文发表日期&#xff1a;2019.9.5作者&#xff1a;Denis Brandi翻译&#xff1a;tommwq翻译日期&#xff1a;2024.1.3 Figure 1: 仓库模式 多年来我见过很多仓库模式的实…

部署清华ChatGLM-6B(Linux版)

引言 前段时间,清华公布了中英双语对话模型 ChatGLM-6B,具有60亿的参数,初具问答和对话功能。最!最!最重要的是它能够支持私有化部署,大部分实验室的服务器基本上都能跑起来。因为条件特殊,实验室网络不通,那么如何进行离线部署呢? 「部署环境」:CUDA Version 11.0,…