uniCloud 云函数操作云数据库-基础篇

原文:uniCloud 云函数操作云数据库-基础篇

1. database()

获取数据库对象

const db = uniCloud.database();//代码块为cdb
1.1 database.collection(name)

获取集合(类比于数据库中的表)

// 获取数据库对象
const db = uniCloud.database();
// 获取名为 table1 的集合
const table = db.collection("table1");

collection对象的方法

提示

  1. collection对象的方法可以增和查数据,删和改不能直接操作,需要collection对象通过doc()get() 得到指定的记录后再调用 remove()update() 方法进行删改。
  2. count、where、skip、orderBy、limit、field 方法要 get() 结合使用,只有当调用 get() 时,才会真正的发送查询请求,其他方法则是为了查询更精准的数据而去设置查询条件
1.1.1 collection.add()

新增记录(触发请求),支持单条和批量两种方式

入参

参数类型必填
dataobject / array

响应参数

单条插入

参数类型说明
idString插入记录的id

批量插入

参数类型说明
insertedNumber插入成功条数
idsArray批量插入所有记录的id

创建一条新记录,每条记录都会自带一个_id字段用以作为该记录的唯一标志。_id字段是每个数据表默认自带且不可删除的字段。同时它也是数据表的索引。

// 云函数写法,后续写法省略 exports
'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',
      type: {
          className: '一年级'
      }
    })
    
    // 批量插入
    let res2 = await user_table.add([
    {
        name: 'Alex',
        type: {
            className: '一年级'
        }
    },{
        name: 'Ben',
        type: {
          className: '三年级'
        }
    },{
        name: 'John'
    }
    ])
    
    return {
        code: 200,
        msg: '添加成功',
        data: res2
    }
}
1.1.2 collection.doc()

首先记住引用≠获取到了数据。获取对该集合中指定 id 的记录的引用(引用的用途是为了实现对唯一数据的进行更新、删除操作,也可以通过该引用直接获取到该记录)

引用对象的方法

// 1. 将id为1的数据覆盖
let res = await collection.doc('1').set({
  name: "Ben",
  type: {
    className: '五年级'
  }
})

// 2. 将id为1的数据 name 字段更新为 Ben2
let res2 = await collection.doc('1').update({
  name: "Ben2"
});

// 3. 如果集合包含数组结构,可以通过下标进行更新,例如:
// {
//   "_id": "doc-id",
//  "arr": ["hello", "uniCloud"]
//}
// let res = await collection.doc('doc-id').update({
//   arr: {
//    1: "uniCloud"
//  }
//})

// 4. 删除全部数据
let res3 = await collection.get()
res.data.map(async(document) => {
  return await collection.doc(document.id).remove();
});

// 5. 获取记录
let res4 = await collection.doc('1').get();
1.1.2.1 doc.set()

更新文档,如果不存在则创建,此方法会覆写已有字段,需注意与update表现不同

1.1.2.2 doc.update()

未使用set、remove更新操作符的情况下,此方法不会删除字段,仅将更新数据和已有数据合并。

入参

参数类型必填
dataobject

响应参数

参数类型说明
updatedNumber更新成功条数,数据更新前后没变化时会返回0
1.1.2.3 doc.remove()

通过指定ID删除

响应参数

参数类型说明
deletedNumber删除的记录数量
const db = uniCloud.database();
db.collection("user").doc("1").remove()
    .then((res) => {
        console.log("删除成功,删除条数为: ",res.deleted);
    })
    .catch((err) => {
        console.log( err.message )
    })
    .finally(() => {

    })
1.1.3 collection.get()

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

1.1.4 collection.count()

获取符合条件的记录条数

响应参数

参数类型说明
totalNumber计数结果
// 获取数据库对象
const db = uniCloud.database();
// 获取名为 user 的集合
const user_table = db.collection("user");

let res = await user_table.where({
  name: 'Ben',
  type: {
    className: '三年级',
  }
}).count()

return {
    code: 200,
    msg: '查询成功',
    data: res2.total
}
1.1.5 collection.where()

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

// 获取数据库对象
const db = uniCloud.database();
// 获取名为 user 的集合
const user_table = db.collection("user");
// 获取name为 Ben 的数据
let res = await user_table.where({
  name: 'Ben'
}).get()

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

where 除了上面设置过滤条件外,还可以通过高级查询指令进行查询,下篇会进行讲解。

1.1.6 collection.skip()

设置起始位置

入参

参数类型说明
valueNumber跳过指定的位置,返回该位置之后的数据
let res = await collection.skip(4).get()

数据量很大的情况下,skip性能会很差,建议使用分页的形式处理

1.1.7 collection.orderBy()

结果排序

入参

参数类型说明
fieldstring排序的字段
orderTypestring排序的顺序,升序(asc) 或 降序(desc)
let res = await collection.orderBy("name", "asc").get()
1.1.8 collection.limit()

设置返回的数据数量,默认返回100条数据;设置limit有最大值,腾讯云限制为最大1000条,阿里云限制为最大500条。

入参

参数类型说明
valueNumber返回的数据条数
let res = await collection.limit(1).get() // 只返回第一条记录
1.1.9 collection.field()

指定返回字段

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

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐