数据库没有数据插入playlist
来源:3-11 歌单数据去重
慕沐7268204
2021-04-14
用了更新后的代码,代码没有错误,函数调用也成功,但是为什么数据库playlist一直没有数据的。。。本地测试也是成功
代码:// 云函数入口文件
const cloud = require(‘wx-server-sdk’)
cloud.init({
env: cloud.DYNAMIC_CURRENT_ENV
})
const db = cloud.database() //云数据初始化
const axios = require(‘axios’)
const URL = ‘https://apis.imooc.com/personalized?icode=838D6B1352803B27’
const playlistCollection = db.collection(‘playlist’)
const MAX_LIMIT = 10
// 云函数入口函数
exports.main = async (event, context) => {
//const list = await playlistCollection.get()
const countResult = playlistCollection.count() //该方法返回值是一个对象,且为异步操作
const total = countResult.total //取到该数组的总条数
const batchTimes = Math.ceil(total / MAX_LIMIT) // 计算要取几次,220/100,向上取整取三次,异步操作
const tasks = []
for(let i = 0; i < batchTimes; i++){
let promise = playlistCollection.skip(i * MAX_LIMIT).limit(MAX_LIMIT) //每一次要取多少条
tasks.push(promise)
}
let list = {
data: []
}
if(tasks > 0){ //当Promise执行完所有任务后,将每一次的数据拼接起来。
list = (await Promise.all(tasks)).reduce((acc,cur)=>{
return{
data : acc.data.concat(cur.data)
}
})
}
const { data } = await axios.get(URL) //ES6解构赋值,data下得result就是我们想要的数据
if(data.code >= 1000){
console.log(data.msg)
return 0
}
const playlist = data.result
const newData = [] //去重操作
for(let i = 0, len1 = playlist.length; i<len1; i++){
let flag =true //标识符,若为true则id不相同
for(let j = 0,len2 = list.data.length; j<len2; j++){ //判断数据库中list集合是否包含服务器已经拥有的数据
if(playlist[i].id === list.data[i].id){
flag = false
break
}
}
if(flag){
let p1 = playlist[i] //若没有相同的数据,则将数据插入到newData数组中去
p1.createTime = db.serverDate()
newData.push(p1)
}
}
console.log(newData)
if(newData.length > 0){
await playlistCollection.add({
data : [...newData]
}).then((res)=>{
console.log('插入成功')
}).catch((res)=>{
console.log('插入失败')
console.loh(err)
})
}
return newData.length
}
1回答
-
谢成
2021-04-15
需要梳理下这个逻辑,就是如果有新的推荐歌单会插入数据库,如果没有新的推荐歌单数据就不会插入数据库。
所以需要检查下是不是在第一次本地测试的时候,已经把当时那个时间推荐的歌单插入数据库了(歌单不是一直都会有新的),然后再下次测试的时候是不是就没有新的歌单了。
132021-04-15
相似问题