uniCloud云函数中通过传统方式操作数据库的-增删改查

本文详细介绍了如何使用uniCloud的云函数进行数据库的查询、增加、修改和删除操作,包括通过where条件、limit、skip、orderBy和field等方法精细化操作数据,以及批量处理和正则表达式查询。此外,还提到了数据权限系统和JQL语法在数据管理中的应用。

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

云函数

可以看做java或者php,作为后端服务

cloudfunctions/myCloud/index.js

exports.main = async (event, context) => {
  const { name, age } = event
    return `我是${name},今年${age}`
};

pages/index/index.vue

//callFunction方法 在前端和云端都可以调用另一个云函数
uniCloud.callFunction({
   name: "myCloud",
   data:{
   name:"小白",
   age:22
 }
}).then(res => {
  console.log(res)
})

浏览器


db.command

查询及更新指令用于在 where 中指定字段需满足的条件,指令可通过 db.command 对象取得


云函数通过传统方式操作数据库

查-cloudfunctions/cloudDome/index.js

const db = uniCloud.database();
exports.main = async (event, context) => {
  // 获取 `users` 集合的引用
  const collection = await db.collection('users').get()

  return collection
};

查-pages/index/index.vue

<template>
  <view class="content" v-for="item in user" :key="item._id">
    {{item.name}} -- {{item.gender}}
  </view>
</template>

<script>
import { reactive, toRefs } from "vue"
  export default {
    setup() {
      const data = reactive({
        user:{}
      })
      uniCloud.callFunction({
        name: "cloudDome",
        data:{}
      }).then(res => {
        data.user = res.result.data
      })
      return {
        ...toRefs(data)
      }
    }
  }
</script>

查-浏览器


doc,指定 id 的记录的引用

const db = uniCloud.database();
exports.main = async (event, context) => {
  const collection = await db.collection('users').doc("640aa8330c801c2ac9373731").get()
  return collection
};

limit

const db = uniCloud.database();
exports.main = async (event, context) => {
  const collection = await db.collection('users').limit(3).get()
  return collection
};

skip,与limit实现翻页效果,skip指跳过的数据

const db = uniCloud.database();
exports.main = async (event, context) => {
  const collection = await db.collection('users').limit(3).skip(3).get()
  return collection
};

orderBy

const db = uniCloud.database();
exports.main = async (event, context) => {
  const collection = await db.collection('users').orderBy("_id","desc").get()
  return collection
};

field,指定返回字段

const db = uniCloud.database();
exports.main = async (event, context) => {
  const collection = await db.collection('users').field({ 'name': true,'_id':false }).get()
  return collection
};

where与查询筛选指令 Query Command

const db = uniCloud.database();
const dbCmd = db.command
exports.main = async (event, context) => {
  const collection = await db.collection('users').where({
  //age:dbCmd.gt(20).and(dbCmd.lt(48)) 
  age:dbCmd.and(dbCmd.gt(8),dbCmd.lt(48))
  //age:dbCmd.or(dbCmd.and(dbCmd.gt(8),dbCmd.lt(48)),dbCmd.eq(50)) 
  }).get()
  return collection
};

正则表达式查询

const db = uniCloud.database();
const dbCmd = db.command
exports.main = async (event, context) => {
  const {  keyWord  } = event
  const collection = await db.collection('users').where({
    name: new RegExp(keyWord,'ig')  //i表示忽略大小写 g表示全局搜索
  }).get()
  return collection
};

增-cloudfunctions/cloudDome/index.js

const db = uniCloud.database();
exports.main = async (event, context) => {
  const obj = {
    "name": "小红",
    "gender": "未知",
    "tel": 1333333333,
    "mail": "564654654@qq.com"
  }
  const collection = await db.collection('users').add(obj)
  return collection
};

增-pages/index/index.vue

uniCloud.callFunction({
        name: "cloudDome",
        data:{}
}).then(res => {
        console.log(res)
})

增-数据库

改-cloudfunctions/cloudDome/index.js

const db = uniCloud.database()
exports.main = async (event, context) => {
  const {  keyWord  } = event
  const collection = await db.collection('users').doc("640aa8330c801c2ac9373731").update({
    name:'张三被改名了',
    age:0
  })
  return {
    message:'修改成功',
    collection
  }
};

改-数据库

批量改-cloudfunctions/cloudDome/index.js

const db = uniCloud.database()
const dbCmd = db.command
exports.main = async (event, context) => {
  const {  keyWord  } = event
  const collection = await db.collection('users').where({
    age:dbCmd.lt(20)
  }).update({
    text:'小于二十岁的小年轻'
  })
  return {
    message:'修改成功',
    collection
  }
};

批量改-数据库


push,向数组尾部追加元素

const db = uniCloud.database()
const dbCmd = db.command
exports.main = async (event, context) => {
  const {  keyWord  } = event
  const collection = await db.collection('users').doc("640aa867f43e603fbeb7771b").update({
    like:dbCmd.push(["烟花"])
  })
  return {
    message:'修改成功',
    collection
  }
};
//中间添加
const collection = await db.collection('users').doc("640aa867f43e603fbeb7771b").update({
    like: dbCmd.push({
      each: ["大","白"],
      position: 1
    })
})

inc,多用户的点赞

  const collection = await db.collection('users').doc("640aa867f43e603fbeb7771b").update({
    love:dbCmd.inc(1)
  })

删-cloudfunctions/cloudDome/index.js

const db = uniCloud.database()
exports.main = async (event, context) => {
  const collection = await db.collection('users').doc("640aae9ff43e603fbeb96150").remove()
  return {
    message: '修改成功',
    collection
  }
};

批量删-cloudfunctions/cloudDome/index.js

const db = uniCloud.database()
const dbCmd = db.command
exports.main = async (event, context) => {
  const collection = await db.collection('users').where({
    name:/小/ig
  }).remove()
  return {
    message: '修改成功',
    collection
  }
};

云对象

展示-cloudfunctions/demoObj/index.obj.js

const db = uniCloud.database()
module.exports = {
  _before: function() { // 通用预处理器 这个不用管,留着就好
  },
  async get(num) {
    return await db.collection("user").limit(num).get()
  },
  add: async () => {
    await db.collection('user').add({
      name:'张麻子',
      content:'我张麻子没有麻子'
    })
  }
}

展示-pages/index/index.vue

  const cloudObj = uniCloud.importObject("demoObj") //导入云对象
    export default {
     setup() {
      cloudObj.get(3).then(res=>{
        console.log(res)
      })
      cloudObj.add().then(res =>{
        console.log(res)
      })
      return {}
    }
}

DB Schema属性节点

foreignKey外键

文章表通过外键的形式绑定user表_id,这样文章就能绑定单个用户,形成关联

//user表
{
    "_id": "606e721280b8450001e773c6",
    "category_id": "606e6feb653b8400017214a3",
    "title": "这里是标题",
    "content": "这里是正文",
    "user_id": "60b9315801033700011ba9ed",
    "publish_date": 1617850851000,
    "publish_ip": "119.131.174.251"
}
//文章表
"properties": {
  "_id": {
    "description": "存储文档 ID(用户 ID),系统自动生成"
  },
  "user_id": {
    "bsonType": "string",
    "description": "文章作者ID, 参考`uni-id-users` 表",
    "foreignKey": "uni-id-users._id",
    "defaultValue": {
      "$env": "uid"
    }
  },
  "title":{},
  "content":{}
}

permission数据权限系统

变量名

说明

auth.uid

用户id

doc

数据库中的目标数据记录,用于匹配记录内容/查询条件

{
  "permission": {
    "read": "doc.status==true", // 任何用户都可以读status字段的值为true的记录,其他记录不可读
    "create": "doc.userid == auth.uid", // 文章中携带的userid 登录 用户id,才能进行发布文章
    "update": false, // 禁止更新数据(admin权限用户不受限)
    "delete": false // 禁止删除数据(admin权限用户不受限)
  }
}

JQL语法

art文章表关联了 user标的_id,并命名为userid

const db = uniCloud.database()

//结尾的方法是getTemp,对usersTemp与artList表过滤 得到临时表
let userTemp = db.collection("usersTemp").field("_id,username,nickname").getTemp();
let artTemp = db.collection("artList").field("userid,title,content,").getTemp();
db.collection(artTemp,userTemp).orderBy("_id desc").get().then(res=>{
  console.log(res)
 })
}
### 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 请求事件并将它们分发至对应的处理器内部去响应具体的动作指令。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

来自湖南的阿晨

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值