云数据库提供高性能的数据库写入和查询服务。通过腾讯云开发(Tencent CloudBase.TCB)的SDK,可以直接在客户端对数据进行读写,也可以在云函数中读写数据,还可以通过控制台对数据进行可视化的增、删、查、改等操作。微信小程序云开发所使用的数据库本质上就是一MongoDB数据库。MongoDB数据库是介于关系数据库和非关系数据库之间的产品:是非关系数据库中功能最丰富、最像关系数据库的。
数据库:默认情况下,云开发的函数可以使用当前环境对应的数据库。可以根据需要使用不同的数据库。对应MySQL中的数据库。
集合:数据库中多个记录的集合。对应MySQL中的表。
文档:数据库中的一条记录。对应MySQL中的行。
字段:数据库中特定记录的值。对应MySQL中的列。
string:字符串。
number:数字。
object:对象。
array:数组。
bool:布尔值。
date:时间。
geo:多种地理位置类型。
null。
触发网络请求的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 | 找出与给定的地理位置图形相交的记录 |
类别 | 指令 | 说明 |
---|---|---|
字段 | 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()