1.处理图书馆数据。
要求的格式是
学期 uid date time
提取 name content
file = open("/Users/rjf/Downloads/成绩排名预测/训练/图书馆门禁.txt")
file2 = open("/Users/rjf/Downloads/成绩排名预测/训练/图书馆门禁_processed.txt",'w')
#直接读第一行,然后跳过处理,额外添加一列cate标记收入/支出
# file2.writelines(file.readline().strip('\n')+' cate\n')
#改变第一行标题,跳过第一行
file2.writelines('学期 '+'uid '+'name '+'content\n')
next(file)
for line in file:
data = line.strip('\n').split('\t')
data[2] = '2014-'+data[2][:2]+'-'+data[2][2:]
data[3] = data[3][:2]+':'+data[3][2:4]
#队友需要的数据格式要求记录收入或者支出,这里统一设置为支出,'-'
data.append('\n')
#在列表各元素之间加入空格
data = " ".join(str(i) for i in data)
file2.writelines(data)
file.close()
file2.close()
![](https://i-blog.csdnimg.cn/blog_migrate/2bade104072ffec1828186e1be3f47da.png)
2. 在数据库中对uid添加索引
![](https://i-blog.csdnimg.cn/blog_migrate/d11a5a93b58f7a3f1650a90f79b0dd2b.png)
3.构建云函数使用图书馆数据
这里排序使用orderby
,sort
是aggregate
聚合操作时使用
3.1 返回前100条版本
// 云函数入口文件
const cloud = require('wx-server-sdk')
cloud.init()
const db = cloud.database()
const _ = db.command
// 云函数入口函数
exports.main = async (event, context) => {
return await db.collection('Library_safe').where({
uid : event.uid
}).orderBy('name','asc').orderBy('content','asc').field({
name:true,
content:true,
_id:false
}).get()
}
3.2 返回全部数据版本
// 云函数入口文件
const cloud = require('wx-server-sdk')
cloud.init()
const db = cloud.database()
const _ = db.command
const MAX_LIMIT = 100
// 云函数入口函数
exports.main = async (event, context) => {
// 先取出集合记录总数
const countResult = await db.collection('Library_safe').where({
uid: event.uid
}).count()
const total = countResult.total
console.log('total'+total)
// 计算需分几次取
const batchTimes = Math.ceil(total / 100)
// 承载所有读操作的 promise 的数组
const tasks = []
for (let i = 0; i < batchTimes; i++) {
const promise = db.collection('Library_safe').where({
uid : event.uid
}).orderBy('name','asc').orderBy('content','asc').field({
name:true,
content:true,
_id:false
}).skip(i * MAX_LIMIT).limit(MAX_LIMIT).get()
tasks.push(promise)
}
// 等待所有
return (await Promise.all(tasks)).reduce((acc, cur) => {
return {
data: acc.data.concat(cur.data),
errMsg: acc.errMsg,
}
})
}
4. 小程序端使用接口
这里以按钮监听函数距离,具体使用更改uid:'97'
用this.data.items2
调用,items2
在页面的初始数据处定义
callFunction2:function(){
console.log("Button is clicked")
var that = this
wx.cloud.callFunction({
name:"library",
data:{
uid : '97'
},
complete: res => {
console.log('callFunction test result: ', res)
that.setData({
// title:res.result.data[0]['title']
items2:res.result.data
})
console.log('title',this.data.items2)
}
})
},
返回结果打印在控制台
\
5. 如何对云函数返回的json数据进行处理
// 先取出集合记录总数
const countResult = await db.collection('Library_safe').where({
uid: event.uid
}).count()
const countResult2 = await db.collection('consumption').where({
uid: event.uid
}).count()
调用function count(options?: object): Promise<Result>
返回的结果结构如下所示:
字段 | 类型 | 说明 |
---|---|---|
total | number | 数量 |
我们需要修改字段名才能返回想要的结果集合
5.1 修改键值对进行合并
这里将返回的total:1477
修改为library_count: 1477
var bbb= JSON.parse(JSON.stringify(countResult).replace(/total/g,"library_count"));
利用eval进行合并
json = eval('('+(JSON.stringify(countResult2)+JSON.stringify(bbb)).replace(/}{/,',')+')');
5.2 直接提取键值,利用键值重新构造
const total = countResult.total
const library_count = countResult2.total
var tasks = {'total':total,'library_count':library_count}
还可以使用下面这种方式进行添加
tasks['add'] = '添加的'
返回结果如下
测试部分到目前完毕,等待队友给出下一部分数据要求进行处理