uniCloud云函数操作云数据库增删改查

本文详细介绍了如何在uniCloud中操作云数据库,包括获取集合引用、新增、计数、读取、删除和更新记录等基本操作。同时展示了云函数的编写,用于处理增删改查请求,并给出了前端Vue.js应用的示例代码,实现了用户列表的展示、添加、删除和编辑功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

uniCloud操作云数据库

1.获取集合的引用

const db = uniCloud.database()
// 获取“users”集合的引用
const users = db.collection('users')

2.集合Collection

通过db.collection(name)可以获取指定集合的引用,在集合上可以进行一下操作

类型接口说明
add新增记录(触发请求)
计数count获取符合条件的记录条数
get获取集合中的记录,如果有使用where语句定义查询条件,则会返回匹配结果集(触发请求)
引用doc获取对该集合中指定的id的记录引用
查询条件where通过指定条件筛选出匹配的记录,可搭配查询指令(eq,gt,in,…)使用
skip跳过指定数量的文档,常用于分页,传入offset
orderBy排序方式
limit返回的结果集(文档数量)的限制,有默认值和上限值
field指定需要返回的字段

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

String:字符串
Number:数字
Object:对象
Array:数组
Bool:布尔值
GeoPoint:地理位置点
GeoLineStringL: 地理路径
GeoPolygon: 地理多边形
GeoMultiPoint: 多个地理位置点
GeoMultiLineString: 多个地理路径
GeoMultiPolygon: 多个地理多边形
Date:时间
Null
以下是云数据库新建的一张表:users
在这里插入图片描述
新建云函数:users, 云函数 用户的 增、删、改、查案例

'use strict';
const db = uniCloud.database();
exports.main = async (event, context) => {
	//event为客户端上传的参数
	const {
		action
	} = event
	let res = {}
	if (action === 'get') {
		res = await db.collection('users').get()
	} else if (action === 'add') {
		const {
			name
		} = event
		res = await db.collection('users').add({
			name
		})
	} else if (action === 'delete') {
		const {
			id
		} = event
		res = await db.collection('users').doc(id).remove()
	} else if (action === 'getOne') {
		const {
			id
		} = event
		res = await db.collection('users').where({
			_id: id
		}).get()
	} else if (action === 'update') {
		const {
			form
		} = event
		res = await db.collection('users').where({
			_id: form._id
		}).update({
			name: form.name
		})
	}

	//返回数据给客户端
	return res
};

前端代码的增删改查
index

<template>
	<view class="content">
		用户列表
		<div class="user-list" v-for="(item,index) in users" :key="index">
			<div class="name">用户姓名:{{item.name}}</div>
			<div class="option-btn">
				<button type="primary" @click="updateUser(item._id)">编辑</button>
				<button type="warn" @click="deleteUser(item._id)">删除</button>
			</div>

		</div>
		<br />
		<input v-model="name" placeholder="请输入用户姓名" />
		<button type="primary" @click="addUser">添加用户</button>
	</view>
</template>

<script>
	export default {
		data() {
			return {
				title: 'Hello',
				users: '',
				name: ''
			}
		},
		onLoad() {

		},
		onShow() {
			this.getUser()
		},
		methods: {
			// 获取用户信息
			async getUser() {
				const res = await uniCloud.callFunction({
					name: 'users',
					data: {
						action: 'get'
					}
				})
				console.log(res)
				this.users = res.result.data
			},
			// 添加用户信息
			async addUser() {
				if (!this.name) {
					uni.showToast({
						title: '用户名不能为空',
						icon: 'none'
					})
					return
				}
				const res = await uniCloud.callFunction({
					name: 'users',
					data: {
						action: 'add',
						name: this.name
					}
				})
				if (res.result.id) {
					uni.showToast({
						title: '添加成功',
						icon: 'none'
					})
					this.name = ''
					this.getUser()
				}
			},
			// 删除用户信息
			async deleteUser(id) {
				const res = await uniCloud.callFunction({
					name: 'users',
					data: {
						action: 'delete',
						id
					}
				})
				if (res.result.affectedDocs && res.result.deleted) {
					uni.showToast({
						title: '删除成功',
						icon: 'none'
					})
					this.getUser()
				}
			},
			// 更新用户信息
			updateUser(id) {
				uni.navigateTo({
					url: '../detail/detail?id=' + id
				})
			}
		}
	}
</script>

<style>
	.user-list {
		display: flex;
		margin: 20rpx;
		align-items: center;
		border-bottom: 1rpx solid #ccc;
	}

	.name {
		flex: 1;
	}

	.option-btn {
		display: flex;
		width: 350rpx;
	}
</style>

detail 主要是 根据id查详情、和修改

<template>
	<view>
		<input v-model="form.name" placeholder="请输入修改名称" />
		<button type="primary" @click="updateUser">确认修改</button>
	</view>
</template>

<script>
	export default {
		data() {
			return {
				form: {
					name: ''
				}
			}
		},
		onLoad(option) {
			const {
				id
			} = option
			this.getUserById(id)
		},
		methods: {
			// 根据用户id查询用户信息
			async getUserById(id) {
				const res = await uniCloud.callFunction({
					name: "users",
					data: {
						action: 'getOne',
						id
					}
				})
				this.form = res.result.data[0]
			},
			// 修改用户信息
			async updateUser() {
				if (!this.form.name) {
					uni.showToast({
						title: '用户名不能为空',
						icon: 'none'
					})
					return
				}
				const res = await uniCloud.callFunction({
					name: 'users',
					data: {
						action: 'update',
						form: this.form
					}
				})
				console.log(res)
				if (res.result.affectedDocs && res.result.updated) {
					uni.showToast({
						title: '修改成功',
						icon: 'none'
					})
					setTimeout(() => {
						uni.navigateBack({

						})
					}, 1000)
				}
			}
		}
	}
</script>

<style>

</style>


实现效果,简单的例子到此结束,记录学习
在这里插入图片描述
在这里插入图片描述

### UniApp 中实现与数据库连接以完成增删改查操作 #### 1. 使用 SQLite 和 UniCloud 实现本地和云端的增删改查功能 对于在 **UniApp** 应用程序中集成数据库操作,可以通过两种主要途径来实现:一种是利用内置支持的轻量级关系型数据库 **SQLite** 完成本地存储;另一种则是借助于 **UniCloud** 提供的服务端能力来进行远程服务器上的数据管理。 当采用 **SQLite** 方案时,开发者能够快速构建具备基础 CRUD (Create, Read, Update, Delete) 功能的应用模块[^1]。而通过引入 **UniCloud** 的云函数特性,则允许更加灵活高效地对接各类外部服务,包括但不限于 MySQL、MongoDB 等多种类型的数据库系统[^4]。 #### 2. 配置应用环境准备阶段 为了使项目顺利运行,在正式编码之前需先做好必要的准备工作: - 如果计划使用 **SQLite** ,则无需额外安装驱动包,因为该引擎已被打包进 Android/iOS 平台; - 对于打算接入其他种类的关系型或非关系型数据库而言,则可能涉及到特定客户端库的选择以及相应依赖项的添加工作; - 不论哪种情况都建议提前规划好 API 接口的设计思路,并确保前后端交互协议的一致性。 #### 3. 编写业务逻辑代码片段展示 下面给出一段简单的 JavaScript 函数作为例子说明如何执行更新记录的动作: ```javascript // 更新单条记录的方法定义 export function updateUser(userId, updatedData){ const db = uni.getDatabase(); // 获取当前实例下的默认数据库对象 try { await db.collection('users').doc(userId).update({ data:updatedData, success(res){ console.log(`成功修改了 ${res.stats.updated} 条文档`); }, fail(err){ throw new Error(`发生错误:${JSON.stringify(err)}`); } }); } catch(error){ console.error("Error updating document:", error); } } ``` 此段脚本展示了怎样运用官方提供的 `uni.getDatabase()` 方法获取到一个可操作的数据集句柄之后再调用其链式方法 `.collection().doc().update()` 向指定位置发送变更请求。 另外值得注意的是,如果目标平台为 H5 或者桌面版的话,还需要考虑跨域资源共享(CORS)策略的影响因素,适当调整 Webpack 构建工具的相关设置以适应实际需求场景。 #### 4. 创建控制器类处理HTTP请求 针对较为复杂的业务流程设计模式下推荐建立专门用于接收来自前端页面传入参数并转发给后台微服务体系做进一步加工计算的中间层组件——即所谓的 "Controller" 。此类通常会继承自框架自带的基础父类从而获得诸如路由匹配解析等功能的支持[^3]。 ```typescript import { Controller, Get, Post, Body, Param } from '@nestjs/common'; import { UsersService } from './users.service'; @Controller('api/v1/users') export class UsersController { constructor(private readonly userService: UsersService){} @Post() async create(@Body() createUserDto: CreateUserDto): Promise<User> { return this.userService.create(createUserDto); } @Get(':id') findOne(@Param('id') id: string): Promise<User | undefined>{ return this.userService.findOne(id); } ... } ``` 上述 TypeScript 文件中的 `UsersController` 类负责监听 `/api/v1/users/:id` 路径下的 GET/POST 请求事件并将它们分发至对应的处理器内部去响应具体的动作指令。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值