小程序:云数据库

本文详细介绍了如何在小程序中和云函数中操作云数据库,包括数据的增删查改、分页、排序和权限管理。特别讨论了如何突破小程序查询限制,利用云函数获取超过100条数据,并展示了实际示例代码。同时,提到了数据安全和权限控制的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题导向

云数据库如何使用?

如果你都有了答案,可以忽略本文章,或去小程序学习地图寻找更多答案


云数据库

在这里插入图片描述

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
}

学习更多

小程序学习地图

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值