概述
云开发API:
①数据库API(①小程序端API;②服务端API;)②HTTP API
云能力初始化
app.js
App({
onLaunch() {//小程序生命周期函数onLaunch,小程序启动时会调用它
wx.cloud.init({
env: '你的环境ID',
traceUser: true//在用户管理中 记录用户对云资源的访问
})
}
})
数据库的引用
const db = wx.cloud.database() //获取默认环境的数据库的引用
可以有选择地其他环境数据
const db = wx.cloud.database({
env: '环境ID'
})
获取数据库中的目标数据的引用
const db = wx.cloud.database('test')//获取数据库中test集合的引用
const sb = wx.cloud.database('test').doc('abc')//获取test集合中ID为abc的记录的引用
在集合中插入数据
回调风格
//在集合对象test调用add方法
const db = wx.cloud.database()
db.collection('test').add({
data: {
_id: '01',
name: "lyh",
due: new Data('20xx-0x-0x'),//new Data()获取客户端时间
/*due: db.serverData()//获取服务器时间(准确时间)*/
tags:[
"papaer"
],
location: new db.Geo.Point(113, 23),//db.Geo.point(东经,北纬)
done: false
},
success: fuction(res) {//操作成功 小程序会自动调用success函数,并传入一个res值
console.log(res)
},
fail: fuction(res) {//操作失败 同上
console.log(res)//res中errcode 字段表示错误码, errMsg 字段表示错误信息
},
complete: fuction(res) {
console.log(res)//res 同success或fail中res
}
})
promise风格
db.collection('test').add({
data: {
_id: '01',
name: "lyh",
due: new Data('20xx-0x-0x'),//new Data()获取客户端时间
/*due: db.serverData()//获取服务器时间(准确时间)*/
tags:[
"papaer"
],
location: new db.Geo.Point(113, 23),//db.Geo.point(东经,北纬)
done: false
}
}).then(res => {//箭头函数语法 相当于success
console.log(res)
}).catch(res => {
console.log(res)
})
两种风格不能混用
查询数据
在集合和记录对象上都有一个get
方法,可获得单个记录或集合中多个记录的数据
//记录
db.collection('test').doc('id-1').get({//id-1时某个id的值
success: fuction(res) {
//res.data 包含集合中ID为id-1的记录的数据
console.log(res.data)
}
})
//集合
db.collection('test').get({
success: fuction(res) {
//res.data 是一个包含集合有权限访问的所有记录的数据
console.log(res.data)
})
分页查询
由于服务器默认一次最多传回20条记录
云端调用该API函数时,服务器默认一次最多传回100条记录
Page({
data: {
pageData: [],//已经获取的分页数据,通常会在视图层用wx:for列表渲染该数据
nextPage: 0//下拉触底时,应该获取上一页的数据的页码,从0开始
},
onLoad() {
this.getNextPageData()//进入页面时 立即获取第0页数据
},
onReachBottom() {
this.getNextPageData()//下拉触底时 获取下一页的数据
},
getNextPageData() {
const PAGE_COUNT = 20//用常量表示每一页显示的数据的数量
const db = wx.cloud.database()//引用数据库
db.collection().count.then(res => {//获取集合中的记录的数量
const tatalCount = res.total
const totalPages = Math.ceil(totalCount/PAGE_COUNT)//向上取整
if(this.data.nextPage < totalPages) {
db.collection('todos')
.skip(this.data.nextPage * PAGE_COUNT)//跳过已获取的数据
.limit(PAGE_COUNT)//获取新的20条数据
.get().then(res2 =>{//
//将已有的pageData与新获得的20条数据合并成一个新的数组
const pageData = this.data.pageData.concat(res2, data)//合并数据
this.setData({
pageData,//将合并后的数据更新到data对象中
nextPage: this.data.nextPage + 1 //更新nextPage为下一页
})
})
} else {
console.log('no more data') //数据已经全部加载完毕
}
})
}
})
回调风格时注意this
要提前记录
条件查询
集合引用上使用where方法指定查询条件
db.collection('todos').where({
_openid: 'user-open-id',
done: false
}).get().then(res=> {
console.log(res.data)
})
db.command
中提供的查询指令
指令 | 说明 |
---|---|
eq | 等于 |
neq | 不等于 |
lt | 小于 |
lte | 不大于 |
gt | 大于 |
gte | 不小于 |
in | 字段值在给定数组中 |
nin | 字段值不在给定数组中 |
and | 条件与 表示需同时满足另一条件(逻辑指令) |
or | 条件或 表示满足任何一个条件 |
//20~80 .and()
db.collection('todos').where{(
progress: db.command.gte(20).and(db.command.lte(80))//progress data中定义的一个
}).get().then(res => {
console.log(res.data)
})
//db.command.or([{},{}])
db.collection('todos').where(db.command.or([
{
progress: db.command.lt(50)
},
{
due: db.command.gt(new Data())//日期是今日之后
}
])).get().then()(res => {
console.log(res.data)
})
查询数组和对象
1、匹配集合中的嵌套字段
eg:假设集合中有如下两记录:
[
{
"style": {
"color": "red"
}
},
{
"style": {
"color": "blue"
}
}
]
查询:
//法一:传入相同结构的对象作为查询条件
db.collection().where({
style: {
color: 'blue'
}
}).get()
//法二:点表示法
db.collection().where({
'style.color': 'blue'//点表示法 对象的属性必须用引号引起来
}).get()
2、匹配数组
假设集合中有如下一个记录
{
"data": [1, 2, 3]
}
db.colloction('todos').where({
data: [1, 2, 3]
}).get()
3、匹配数组中的元素
db.collection('todos').where({
data: 2
}).get()
4、匹配数组第n项元素
db.collection('todos').where({
'data.1': 2//'字段名.n': key
})
5、匹配多重嵌套的数组和对象
假设集合中有如下一个记录
{
"test": {
"objects": [
{
"data": [1, 2, 3]
},
{
"data": [4, 5, 6]
},
]
}
}
db.collection('todos').where({
'test.objects.0.data.2': 3
}).get()
最后
以上就是想人陪面包为你收集整理的微信小程序云开发学习笔记No.01的全部内容,希望文章能够帮你解决微信小程序云开发学习笔记No.01所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复