小程序云开发数据去重

云函数入口函数

1.使用包管理工具安装配置环境

npm install --save request
npm install --save request-promise


const cloud = require('wx-server-sdk')

cloud.init()

const db = cloud.database()
const rp = require('request-promise')
const URL = 'http://musicapi.xiecheng.live/personalized'





// 云函数入口函数




exports.main = async (event, context) => {
  const playlist = await rp(URL).then((res) => {
    return JSON.parse(res).result
  })
  // console.log(playlist)
  for(let i = 0;i<playlist.length;i++) {
   await db.collection('playlist').add({
      data: {
        ...playlist[i],
        createTime:db.serverDate()
      }
    }).then((res)=>{
      console.log('seccess')
    }).catch(err => {
      console.log(err)
    })
  }
}

我们会发现很多问题比如每次我们执行代码数据库都会从新存储数据,无论是否保存过

解决问题我们通过先从数据库读取数据,把数据库没有的数据进行存储,重复数据不存储

算法实现

// 云函数入口文件
const cloud = require('wx-server-sdk')

cloud.init() 

const db = cloud.database()
const rp = require('request-promise')
const URL = 'http://musicapi.xiecheng.live/personalized'

// 云函数入口函数
const playlistCollection = db.collection('playlist')
exports.main = async (event, context) => {
  const list = await  playlistCollection.get();
  //取到数据库所有数据(暂不考虑数量限制问题)
  

  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])
    }
  }


  // console.log(playlist)
  for(let i = 0;i<newData.length;i++) {
   await db.collection('playlist').add({
      data: {
        ...newData[i],
        createTime:db.serverDate()
      }
    }).then((res)=>{
      console.log('seccess')
    }).catch(err => {
      console.log(err)
    })
  }

  return newData.length
}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值