问题导向
云数据库如何使用?
如果你都有了答案,可以忽略本文章,或去小程序学习地图寻找更多答案
云数据库
3种方式操作云数据库
1,云函数操作云数据库
2,小程序中操作云数据库
3,HTTP操作,需要请求
注意
数据查询:
小程序端一次只能查询20条数据
云函数端一次能查100条数据
权限管理:
小程序端调用数据库有权限设置,需要设置所有用户可读才能看到别人发布的信息
如果是仅自己可读写权限,不需要传递openid
使用云数据库
小程序中操作数据库
const db = wx.cloud.database() //引入
Page({
onLoad(){
//通过回调的方式
db.collection('数据库名字') //使用
.get({
success(res){
console.log(res)
}
})
//通过promise的方式
const res = db.collection('数据库名字').get()
console.log(res)
}
})
云函数操作云数据库
const cloud = require('wx-server-sdk')
cloud.init()
const TcbRouter = require('tcb-router')
//引入
const db = cloud.database()
//获取数据库集合
const bookCollection = db.collection('books')
const userCollection = db.collection('user')
exports.main = async (event, context) => {
const app = new TcbRouter({ event })
//获取喜欢的书籍
app.router('getLikeBook', async (ctx,next) => {
//获取当前用户
const user = await userCollection.where({
_openid:OPENID
}).get().then(res => res.data[0])
const likeList = user.bookLike
let dataArr = []
//获取当前用户喜欢的书籍
if(likeList){
for (let i = 0; i < likeList.length; i++) {
await bookCollection.where({
_id:likeList[i]
}).get().then(res => dataArr.push(res.data[0]))
}
ctx.body = { dataArr }
}else{
ctx.body = {
status:404
}
}
})
return app.serve()
}
数据库操作
更多请查看官网
//插入数据
books.add({
data:{
...xxx[i]
createTime:books.serverDate()
}
})
//查询全部
books.get()
//条件查询
books.where({
price:_.gt(10)
})
//获取数据库集合数据长度
books.count()
//分页
books.skip()
books.limit()
//排序:根据createTime排序,倒序
books.orderBy('createTime','desc')
//服务器时间
books.serverDate()
//例子:
db.collection('book')
.where({
price:_gt(10)
})
.field({
name:true,
price:true
})
.orderBy('price','desc')
.skip(1)
.limit(10)
.get()
突破查询100条数据限制
const cloud = require('wx-server-sdk')
cloud.init()
//使用云数据库
const db = cloud.database()
//使用npm
const rp = require('request-promise')
const URL = 'http://musicapi.xiecheng.live/personalized'
//获取数据库集合
const playlistCollection = db.collection('playlist')
const MAX_LIMIT = 100
// 云函数入口函数
exports.main = async(event, context) => {
// const list = await playlistCollection.get()
//小程序每次限制100条,这里要读取全部数据:思想:分次取之
//假设有250条
const countResult = await playlistCollection.count()
//获取总数250
const total = countResult.total
//250除以100=2.5向上取整 = 3
const batchTimes = Math.ceil(total / MAX_LIMIT)
const tasks = []
for (let i = 0; i < batchTimes; i++) {
//每次取100次,分3次
let promise = playlistCollection.skip(i * MAX_LIMIT).limit(MAX_LIMIT).get()
//添加到任务数组里
tasks.push(promise)
}
//用list装起来,data是小程序数据库里的标准写法
let list = {
data: []
}
if (tasks.length > 0) {
list = (await Promise.all(tasks)).reduce((acc, cur) => {
return {
data: acc.data.concat(cur.data)
}
})
}
//从url获取数据
const playlist = await rp(URL).then((res) => {
return JSON.parse(res).result
})
//去重操作
const newData = []
for (let i = 0, len1 = playlist.length; i < len1; i++) {
let flag = true
for (let j = 0, len2 = list.data.length; j < len2; j++) {
if (playlist[i].id === list.data[j].id) {
flag = false
break
}
}
if (flag) {
newData.push(playlist[i])
}
}
//插入数据到云数据库
for (let i = 0, len = newData.length; i < len; i++) {
await playlistCollection.add({
data: {
...newData[i],
createTime: db.serverDate(),
}
}).then((res) => {
console.log('插入成功')
}).catch((err) => {
console.error('插入失败')
})
}
return newData.length
}
学习更多