微信小程序云开发(云数据库的使用)

发布时间:2022-09-01 20:00

云数据库:

云数据库提供高性能的数据库写入和查询服务。通过腾讯云开发(Tencent CloudBase.TCB)的SDK,可以直接在客户端对数据进行读写,也可以在云函数中读写数据,还可以通过控制台对数据进行可视化的增、删、查、改等操作。微信小程序云开发所使用的数据库本质上就是一MongoDB数据库。MongoDB数据库是介于关系数据库和非关系数据库之间的产品:是非关系数据库中功能最丰富、最像关系数据库的。
数据库:默认情况下,云开发的函数可以使用当前环境对应的数据库。可以根据需要使用不同的数据库。对应MySQL中的数据库。
集合:数据库中多个记录的集合。对应MySQL中的表。
文档:数据库中的一条记录。对应MySQL中的行。
字段:数据库中特定记录的值。对应MySQL中的列。

数据类型:

string:字符串。

number:数字。

object:对象。

array:数组。

bool:布尔值。

date:时间。

geo:多种地理位置类型。

null。

云数据库API

触发网络请求的API

API 说明
get 获取集合/记录数据
add 在集合上新增记录
update 更新集合/记录数据
set 替换更新一个记录
remove 删除记录
count 统计查询语句对应的记录条数

获取引用的API

API 说明
database 获取数据库引用,返回Database对象
collection 获取集合引用,返回Collection对象
doc 获取对一个记录的引用,返回Document对象

数据库对象的字段

API 说明
command 获取数据库查询及更新指令,返回Command
serverDate 构造服务端时间
Geo 获取地理位置操作对象,返回Geo对象

集合对象API

API 说明
doc 获取对一个记录的引用,返回Document对象
add 在集合上新增记录
where 构建一个在当前集合上的查询条件,返回Query,查询条件中可使用查询指令
orderBy  指定查询数据的排序方式
limit 指定返回数据的数量上限
skip 指定查询时从选中的记录列表中的第几项之后开始返回
field 指定返回结果中每条记录应包含的字段

记录/文档对象API

API 说明
get 获取记录数据
update 局部更新数据
set 替换更新记录
remove 删除记录
field 指定返回结果中记录应包含的字段

Command对象查询指令

类别 指令 说明
比较运算 eq 字段是否等于指定值
neq 字段是否不等于指定值
lt 字段是否小于指定值
lte 字段是否小于或等于指定值
gt 字段是否大于指定值
gte 字段是否大于或等于指定值
in 字段值是否在指定数组中
nin 字段值是否不在指定数组中
逻辑运算 and 条件与,表示需同时满足多个查询筛选条件
or 条件或,表示只需满足其中一个条件即可
nor 表示需所有条件都不满足
not 条件非,表示对给定条件取反
字段 exists 字段存在
mod 字段值是否符合给定取模运算
数组 all 数组所有元素是否满足给定条件
elemMatch 数组是否有一个元素满足所有给定条件
size 数组长度是否等于给定值
地理位置 geoNear 找出字段值在给定点的附近的记录
geoWithin 找出字段值在指定区域内的记录
geoIntersects 找出与给定的地理位置图形相交的记录

Command对象更新指令
类别 指令 说明
字段 set 设置字段为指定值
remove 删除字段
inc 原子操作,自增字段值
mul 原子操作,自乘字段值
min 如果字段值小于给定值,则设为给定值
max 如果字段值大于给定值,则设为给定值
rename 字段重命名
数组 push 往数组尾部增加指定值
pop 从数组尾部删除一个元素
shift 从数组头部删除一个元素
unshift 往数组头部增加指定值
addToSet 原子操作,如果不存在给定元素则添加元素
pull 剔除数组中所有满足给定条件的元素
pullAll 剔除数组中所有等于给定值的元素

云数据库操作代码模板:

1. get模板

db.collection('test')
  .where({
    price: _.gt(10)
  })
  .field({
    name: true,
    price: true,
  })
  .orderBy('price', 'desc')
  .skip(1)
  .limit(10)
  .get()

2. aggregate模板

db.collection('test')
  .aggregate()
  .group({
    // 按 category 字段分组
    _id: '$category',
    // 每组有一个 avgSales 字段,其值是组内所有记录的 sales 字段的平均值
    avgSales: $.avg('$sales')
  })
  .end()

3. add模板

db.collection('test')
  .add({
    data: [
      {
        _id: 'apple-1',
        name: 'apple',
        category: 'fruit',
        price: 10,
      },
      {
        _id: 'orange-1',
        name: 'orange',
        category: 'fruit',
        price: 15,
      },
      {
        _id: 'watermelon-1',
        name: 'watermelon',
        category: 'fruit',
        price: 20,
      },
      {
        _id: 'yaourt-1',
        name: 'yaourt',
        category: 'dairy',
        price: 8,
      },
      {
        _id: 'milk-1',
        name: 'milk',
        category: 'dairy',
        price: 12,
      },
      {
        _id: 'chocolate-1',
        name: 'Lindt chocolate',
        category: 'chocolate',
        price: 16,
      },
    ]
  })

3. set模板

db.collection('test').doc('milk-1').set({
  data: {
    name: 'milk',
    category: 'dairy',
    price: 18,
  }
})

4. count模板

db.collection('test')
  .where({
    price: _.gt(10)
  })
  .count()

5. collection.uodate模板

db.collection('test')
  .where({
    category: 'fruit'
  })
  .update({
    data: {
      price: _.inc(5)
    }
  })

6. doc.update模板

db.collection('test').doc('orange-1')
  .update({
    data: {
      price: _.inc(10)
    }
  })

7. remove模板

db.collection('test').doc('milk-1')
  .remove()

8. 变量声明模板

const serverDate = db.serverDate
const { Point } = db.Geo
db.collection('test').doc('milk-2').set({
  data: {
    name: 'milk 2',
    category: 'dairy',
    price: 20,
    updateTime: serverDate(),
    origin: Point(120, 48)
  }
})

9. 正则表达式查询模板

db.collection('table')
  .where({
    collegeName: db.RegExp({
      regexp: 'string',   // 正则表达式
        // i:大小写不敏感  m:跨行匹配 s:让.可以匹配包括换行符在内的所有字符
      options: 'i|m|s', 
    })
  }).get()

10. 多表联查

db.collection('table1')
.aggregate()
.sort({'字段': -1})   //-1:降序  1:升序
.match({
    查询条件
  }).lookup({
      from: 'table2',
      localField: '当前表连接字段',
      foreignField: '对应表外键字段',
      as: '别名'
    }).end()

ItVuer - 免责声明 - 关于我们 - 联系我们

本网站信息来源于互联网,如有侵权请联系:561261067@qq.com

桂ICP备16001015号