// 云函数入口文件
const cloud = require('wx-server-sdk')
// 初始化云环境
cloud.init()
// 获取数据库实例
const db = cloud.database()
// 每次批量更新的记录数
const BATCH_SIZE = 100
exports.main = async (event, context) => {
try {
console.log('开始获取token字段大于0的用户记录数')
// 计算token字段大于0的记录数
const countResult = await db.collection('users')
.where({
token: db.command.gt(0) // 筛选token大于0的用户
})
.count()
const total = countResult.total
console.log(`符合条件的总记录数获取成功: ${total}`)
// 计算需要处理的批次数
const batchTimes = Math.ceil(total / BATCH_SIZE)
console.log(`计算批次数成功: 需要处理的批次数为 ${batchTimes}`)
let totalUpdated = 0
for (let i = 0; i < batchTimes; i++) {
console.log(`开始处理第 ${i + 1} 批记录`)
try {
// 获取符合条件的记录
const users = await db.collection('users')
.where({
token: db.command.gt(0) // 筛选token大于0的用户
})
.skip(i * BATCH_SIZE)
.limit(BATCH_SIZE)
.get()
console.log(`第 ${i + 1} 批获取成功,共 ${users.data.length} 条记录`)
const tasks = users.data.map(async user => {
try {
console.log(`开始更新用户ID: ${user._id} 的 token 字段`)
await db.collection('users').doc(user._id).update({
data: {
token: 0
}
})
console.log(`用户ID: ${user._id} 的 token 字段更新成功`)
} catch (userUpdateError) {
console.error(`更新用户ID: ${user._id} 时出错: ${userUpdateError}`)
}
})
// 批量执行更新操作
await Promise.all(tasks)
totalUpdated += users.data.length
console.log(`第 ${i + 1} 批处理完成,已更新 ${users.data.length} 条记录`)
} catch (batchError) {
console.error(`处理第 ${i + 1} 批记录时出错: ${batchError}`)
}
}
console.log(`全部批次处理完成,总共更新了 ${totalUpdated} 条记录`)
return {
success: true,
totalUpdated: totalUpdated
}
} catch (err) {
console.error(`发生错误: ${err}`)
return {
success: false,
errorMessage: err
}
}
}