云开发的增删改查(SDK)
配置:注意事项
cloud.init({
traceUser: true,//开启日志
env: "wbw-9gpqknzwb95c2748"//环境ID
})
首先调用获取默认环境的数据库的引用
const db = cloud.database()
增
//get 插入一条
let res= await db.collection('text').add({
data:{
// _id: 'todo-identifiant-aleatoire', // 可选自定义 _id,在此处场景下用数据库自动分配的就可以了
description: "learn cloud database",
due: new Date("2018-09-01"),
tags: [
"cloud",
"database"
],
done: false
}
})
return res
查询
//doc接收一个id参数查询一条
let res = await db.collection('text').doc('17453ede60865b920459efa57c8ff18f').get()
return res
//where查询条件
let res = await db.collection('text').where(
{
// where里面写查询条件
// "_id":"b00064a760866074116972c87e7535c2",
"description":"插入数据一"
}
).get()
return res
查询所有的数据
//直接写get查询所有
let res = await db.collection('text').get()
return res
查询指令
使用数据库 API 提供的 where
方法我们可以构造复杂的查询条件完成复杂的查询任务。
查询指令
假设我们需要查询进度大于 30% 的待办事项,那么传入对象表示全等匹配的方式就无法满足了,这时就需要用到查询指令。数据库 API 提供了大于、小于等多种查询指令,这些指令都暴露在 db.command
对象上。比如查询进度大于 30% 的待办事项:
const _ = db.command
db.collection('todos').where({
// gt 方法用于指定一个 "大于" 条件,此处 _.gt(30) 是一个 "大于 30" 的条件
progress: _.gt(30)
})
.get({
success: function(res) {
console.log(res.data)
}
})
API 提供了以下查询指令:
查询指令 | 说明 |
---|---|
eq | 等于 |
neq | 不等于 |
lt | 小于 |
lte | 小于或等于 |
gt | 大于 |
gte | 大于或等于 |
in | 字段值在给定数组中 |
nin | 字段值不在给定数组中 |
逻辑指令
除了指定一个字段满足一个条件之外,我们还可以通过指定一个字段需同时满足多个条件,比如用 and
逻辑指令查询进度在 30% 和 70% 之间的待办事项:
const _ = db.command
db.collection('todos').where({
// and 方法用于指定一个 "与" 条件,此处表示需同时满足 _.gt(30) 和 _.lt(70) 两个条件
progress: _.gt(30).and(_.lt(70))
})
.get({
success: function(res) {
console.log(res.data)
}
})
既然有 and
,当然也有 or
了,比如查询进度为 0 或 100 的待办事项:
const _ = db.command
db.collection('todos').where({
// or 方法用于指定一个 "或" 条件,此处表示需满足 _.eq(0) 或 _.eq(100)
progress: _.eq(0).or(_.eq(100))
})
.get({
success: function(res) {
console.log(res.data)
}
})
更改数据
局部更新
//使用 update 方法可以局部更新一个记录或一个集合中的记录,局部更新意味着只有指定的字段会得到更新,其他字段不受影响。
let res= await db.collection('text').doc('17453ede60865b920459efa57c8ff18f').update({
// data 传入需要局部更新的数据
data: {
// 表示将 done 字段置为 true
done: true
}
})
return res
除了用指定值更新字段外,数据库 API 还提供了一系列的更新指令用于执行更复杂的更新操作,更新指令可以通过 db.command
取得:
更新指令 | 说明 |
---|---|
set | 设置字段为指定值 |
remove | 删除字段 |
inc | 原子自增字段值 |
mul | 原子自乘字段值 |
push | 如字段值为数组,往数组尾部增加指定值 |
pop | 如字段值为数组,从数组尾部删除一个元素 |
shift | 如字段值为数组,从数组头部删除一个元素 |
unshift | 如字段值为数组,往数组头部增加指定值 |
例如向tags数组中后面增加一个mini-program,首先声明const _ = db.command
注意如果属性名不存在数据库会自动增加一个字段
const _ = db.command
return await db.collection('todos').doc('todo-identifiant-aleatoire').update({
data: {
// 表示指示数据库将字段自增 10
progress: _.push('mini-program')
}
})
替换更新
如果需要替换更新一条记录,可以在记录上使用 set 方法,替换更新意味着用传入的对象替换指定的记录
const _ = db.command
return await db.collection('todos').where({
description:"插入数据一"
}).set({
data: {
description: "learn cloud database",
due: new Date("2018-09-01"),
tags: [
"cloud",
"database"
],
style: {
color: "skyblue"
},
done: false
}
})
删除数据
删除单条数据
let res =await db.collection('text').doc('17453ede60865b920459efa57c8ff18f').remove()
return res
删除多条数据
return await db.collection('todos').where({
条件
done: true
}).remove()