50 lines
1.3 KiB
JavaScript
50 lines
1.3 KiB
JavaScript
'use strict';
|
||
exports.main = async (event, context) => {
|
||
/**
|
||
* 根据搜索记录,设定时间间隔来归纳出热搜数据并存储在热搜表中
|
||
*/
|
||
const SEARCHHOT = 'opendb-search-hot'; // 热搜数据库名称
|
||
const SEARCHLOG = 'opendb-search-log'; // 搜索记录数据库名称
|
||
const SEARCHLOG_timeZone = 604800000; // 归纳搜索记录时间间隔,毫秒数,默认为最近7天
|
||
const SEARCHHOT_size = 10; // 热搜条数
|
||
|
||
const DB = uniCloud.database();
|
||
const DBCmd = DB.command;
|
||
const $ = DB.command.aggregate;
|
||
const SEARCHHOT_db = DB.collection(SEARCHHOT);
|
||
const SEARCHLOG_db = DB.collection(SEARCHLOG);
|
||
const timeEnd = Date.now() - SEARCHLOG_timeZone;
|
||
|
||
let {
|
||
data: searchHotData
|
||
} = await SEARCHLOG_db
|
||
.aggregate()
|
||
.match({
|
||
create_date: DBCmd.gt(timeEnd)
|
||
})
|
||
.group({
|
||
_id: {
|
||
'content': '$content',
|
||
},
|
||
count: $.sum(1)
|
||
})
|
||
.replaceRoot({
|
||
newRoot: $.mergeObjects(['$_id', '$$ROOT'])
|
||
})
|
||
.project({
|
||
_id: false
|
||
})
|
||
.sort({
|
||
count: -1
|
||
})
|
||
.end();
|
||
|
||
let now = Date.now();
|
||
searchHotData.map(item => {
|
||
item.create_date = now;
|
||
return item;
|
||
}).slice(0, SEARCHHOT_size);
|
||
// searchHotData = searchHotData.sort((a, b) => b.count - a.count).slice(0, SEARCHHOT_size);
|
||
return searchHotData.length ? await SEARCHHOT_db.add(searchHotData) : ''
|
||
};
|