云数据库提供高性能的数据库写入和查询服务。通过腾讯云开发(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
找出与给定的地理位置图形相交的记录
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()