uniCloud 云函数操作云数据库

前言

由于官方写的过于仔细,所以特意整理一份简单明了的操作指南,接下来直接进入操作,部分相关介绍可能是借鉴其他博主或官方介绍


一、连接数据库拿到表集合

// 获取数据库对象
const db = uniCloud.database();

// 获取名为 user的表集合
const user_table= db.collection("user");

二、使用步骤

1.写入数据

调用add方法,给某数据表新增数据记录时,如果该数据表不存在,会自动创建该数据表。如下代码给user数据表新增了一条数据,如果user不存在,会自动创建。


'use strict';
// 获取数据库对象
const db = uniCloud.database();

// 云函数
exports.main = async (event, context) => {

    // 获取名为 user 的集合
    const user_table = db.collection("user");
    // 单条插入
    let res = await user_table.add({
      name: 'Ben',
    })
    
    // 批量插入
    let res2 = await user_table.add([
    {
        name: '张同学'
    },{
        name: '李同学'
    },{
        name: '王同学'
    }
    ])
    
    return {
        code: 200,
        msg: '添加成功',
        data: res2
    }
}

2.引用doc()

collection对象的方法可以增和查数据,删和改不能直接操作,需要collection对象通过doc或get得到指定的记录后再调用remove或update方法进行删改。默认是通过id唯一查询

2.1 修改数据方法一: doc.set()

通过set()方法会覆盖整条数据,如果数据不存在的话会直接创建

// 获取数据库对象,拿到表
const db = uniCloud.database();
const user_table= db.collection("user");

// 将id为12345的数据进行一个覆盖
let res = await user_table.doc('12345').set({
  name: "张同学",
})

2.2 修改数据方法二: doc.update()

通过update()方法会进行数据的一个局部更新

// 获取数据库对象,拿到表
const db = uniCloud.database();
const user_table= db.collection("user");

// 将id为12345的张同学修改为新同学
let res = await user_table.doc('12345').update({
  name: "新同学",
})


2.3 删除数据: doc.remove()

通过remove()方法进行指定ID删除

// 获取数据库对象,拿到表
const db = uniCloud.database();
const user_table= db.collection("user");

// 获取id为12345的同学,并进行一个删除
user_table.doc('12345').remove().then((res) => {
        console.log("删除成功");
 })

3.读取数据

3.1 读取全部数据: collection.get()

获取集合中的记录,如果有使用 where 语句定义查询条件,则会返回匹配结果集 (触发请求)

// 获取数据库对象,拿到表
const db = uniCloud.database();
const user_table= db.collection("user");

// 获取user_table所有数据
let res = user_table.get()

rerun {
    code: 200,
    msg: '查询成功',
    data: res
}

3.2 读取筛选数据: collection.where()

设置过滤条件,where 可接收对象作为参数,表示筛选出拥有和传入对象相同的 key-value 的数据

// 获取数据库对象,拿到表
const db = uniCloud.database();
const user_table= db.collection("user");

// 获取user_table中name为张同学的数据
let res = await user_table.where({
  name: '张同学'
}).get()

rerun {
    code: 200,
    msg: '查询成功',
    data: res
}

3.3 计数: collection.count()

获取符合条件的记录条数

// 获取数据库对象,拿到表
const db = uniCloud.database();
const user_table= db.collection("user");

// 获取user_table中name为张同学的数据条数
let res = await user_table.where({
  name: '张同学',
}).count()

return {
    code: 200,
    msg: '查询成功',
    data: res.total
}


3.4 起始位置: collection.skip()

跳过指定的位置,返回该位置之后的数据,数据量很大的情况下,skip性能会很差,建议使用分页的形式处理

// 获取数据库对象,拿到表
const db = uniCloud.database();
const user_table= db.collection("user");

// 从4四条数据开始读取
let res = await user_table.skip(4).get()

3.5 结果排序: collection.orderBy()

项目Value项目
fieldstring排序的字段
orderTypestring排序的顺序,升序(asc) 或 降序(desc)

// 获取数据库对象,拿到表
const db = uniCloud.database();
const user_table= db.collection("user");

// name升序查询
let res = await user_table.orderBy("name", "asc").get()

3.6 数据量: collection.limit()

// 获取数据库对象,拿到表
const db = uniCloud.database();
const user_table= db.collection("user");

// 只返回前10条记录
let res = await user_table.limit(10).get() 

3.7 限制返回: collection.field()

指定返回字段

// 获取数据库对象,拿到表
const db = uniCloud.database();
const user_table= db.collection("user");

// 只返回name字段、_id字段,其他字段不返回
let res = await collection.field({ 'name': true })

三、实战综合案例

1. 分页获取数据

'use strict';
// 获取数据库对象
const db = uniCloud.database();

// 云函数
exports.main = async (event, context) => {
	//前端传入的参数:search,pageIndex ,pageSize
    let search= event.search? event.search: {} ;  
    let pageIndex = event.pageIndex ? event.pageIndex : 1 ;  // 页码
	let pageSize = event.pageSize ? event.pageSize : 10 ;   // 每页展示条数
   
    // 获取总数量
    let dataCount = await db.collection(dbName).where(filter).count() 
    let total = dataCount .total 
   
    //计算页数
    const totalPage = Math.ceil(total / pageSize) 

     //如果没有数据了,就返回false
    let hasMore ;
    if (pageIndex > totalPage || pageIndex == totalPage) { 
		hasMore = false 
    } else {
	     hasMore = true 
    }

    return db.collection(dbName)
			.where({is_on_sale : true})
			.skip((pageIndex - 1) * pageSize)
			.limit(pageSize)
			.get()
			.then( res => {
				res.hasMore = hasMore ;
				res.code  = 200
				return res ;  // 返回json给客户端
			})     
}


  • 5
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
uniapp的函数是一种在端运行的函数,可以对数据进行各种操作。在uniapp中,可以通过函数来进行sum(求和)操作。 首先,我们需要在函数文件夹下创建一个sum函数的文件,并在其中编写相应的代码逻辑。在函数的入口函数中,我们可以使用uniCloud提供的数据库API来获取需要求和的数据。 例如,假设我们有一个存储了数字的集合(collection)叫做"numbers",里面有多个文档(document)分别存储着不同的数字。我们可以在sum函数中使用uniCloud数据库API来查询这些数字,并计算它们的总和。 首先,我们通过调用`cloud.database()`方法获取数据库的引用,然后使用`collection`方法指定要操作的集合。接着,我们使用`get()`方法获取集合中的所有文档,并对它们的值进行求和操作。 具体代码如下所示: ```javascript // 'sum' 函数的入口函数 exports.main = async (event, context) => { const db = uniCloud.database() // 获取数据库的引用 const numbersCollection = db.collection('numbers') // 获取 'numbers' 集合的引用 // 使用 'get()' 方法获取集合中的所有文档 const res = await numbersCollection.get() // 对文档的值进行求和操作 let sum = 0 res.data.forEach(doc => { sum += doc.value }) return { sum: sum } } ``` 以上代码中,我们将求和的结果作为对象返回,其中`sum`表示总和的值。 最后,我们可以在uniapp的页面中调用这个函数,并获取到求和的结果。将结果展示在页面上,或者根据需要进行其他操作。 总的来说,uniapp的函数操作sum可以通过端的数据库API来获取数据并进行求和操作,最后将结果返回给前端页面。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

摆烂小优

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

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

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

打赏作者

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

抵扣说明:

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

余额充值