• 微信小程序云开发学习笔记No.01


    云开发API:
    ①数据库API(①小程序端API;②服务端API;)②HTTP API

    云能力初始化

    app.js

    App({
    	onLaunch() {//小程序生命周期函数onLaunch,小程序启动时会调用它
    		wx.cloud.init({
    			env: '你的环境ID',
    			traceUser: true//在用户管理中 记录用户对云资源的访问
    		})
    	
    	}
    })
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    数据库的引用

    const db = wx.cloud.database() //获取默认环境的数据库的引用
    
    • 1

    可以有选择地其他环境数据

    const db = wx.cloud.database({
    	env: '环境ID'
    })
    
    • 1
    • 2
    • 3

    获取数据库中的目标数据的引用

    const db = wx.cloud.database('test')//获取数据库中test集合的引用
    
    const sb = wx.cloud.database('test').doc('abc')//获取test集合中ID为abc的记录的引用
    
    • 1
    • 2
    • 3

    在集合中插入数据

    回调风格

    //在集合对象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
    	}
    })
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25

    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)
    })
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    两种风格不能混用


    查询数据

    在集合和记录对象上都有一个get方法,可获得单个记录或集合中多个记录的数据

    //记录
    db.collection('test').doc('id-1').get({//id-1时某个id的值
    	success: fuction(res) {
    		//res.data 包含集合中ID为id-1的记录的数据
    		console.log(res.data)
    	}
    })
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    //集合
    db.collection('test').get({
    	success: fuction(res) {
    	//res.data 是一个包含集合有权限访问的所有记录的数据
    		console.log(res.data)
    	
    })
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    分页查询

    由于服务器默认一次最多传回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') //数据已经全部加载完毕
    			}
    		})
    	}
    })
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37

    回调风格时注意this要提前记录


    条件查询

    集合引用上使用where方法指定查询条件

    db.collection('todos').where({
    	_openid: 'user-open-id',
    	done: false
    }).get().then(res=> {
    	console.log(res.data)
    })
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    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)
    })
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    //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
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    查询数组和对象

    1、匹配集合中的嵌套字段
    eg:假设集合中有如下两记录:

    [
    	{
    		"style": {
    				"color": "red"
    		}
    	},
    	{
    		"style": {
    				"color": "blue"
    		}
    	} 
    ]
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    查询:

    //法一:传入相同结构的对象作为查询条件
    db.collection().where({
    	style: {
    		color: 'blue'
    	}
    }).get()
    //法二:点表示法
    db.collection().where({
    	'style.color': 'blue'//点表示法 对象的属性必须用引号引起来
    }).get()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    2、匹配数组
    假设集合中有如下一个记录

    {
    	"data": [1, 2, 3]
    }
    
    • 1
    • 2
    • 3
    db.colloction('todos').where({
    	data: [1, 2, 3]	
    }).get()
    
    • 1
    • 2
    • 3

    3、匹配数组中的元素

    db.collection('todos').where({
    	data: 2
    }).get()
    
    • 1
    • 2
    • 3

    4、匹配数组第n项元素

    db.collection('todos').where({
    	'data.1': 2//'字段名.n': key
    }) 
    
    • 1
    • 2
    • 3

    5、匹配多重嵌套的数组和对象
    假设集合中有如下一个记录

    {
    	"test": {
    		"objects": [
    			{
    				"data": [1, 2, 3]
    			},
    			{
    				"data": [4, 5, 6]
    			},
    		]
    	}
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    db.collection('todos').where({
    	'test.objects.0.data.2': 3
    }).get()
    
    • 1
    • 2
    • 3
  • 相关阅读:
    【机器学习11】强化学习
    代码随想录算法训练营第60天|739. 每日温度、496.下一个更大元素 I
    C++如何监控键盘输入输出
    java基础、底层实现、面试
    Python爬虫编程思想(162): 综合爬虫项目:可视化爬虫
    精通Java事务编程(5)-弱隔离级别之写倾斜与幻读
    【python百炼成魔】Python循环语句:掌握while循环的实战应用
    JavaScript——创建对象的三种方法
    Web大学生网页作业成品:基于html制作中国科技发展网站设计题材【航天之路7页】HTML+CSS+JavaScript
    java练习项目 拼图游戏
  • 原文地址:https://blog.csdn.net/m0_55825393/article/details/124930026