| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163 |
- // 云函数入口文件
- const cloud = require('wx-server-sdk')
- cloud.init()
- const db = cloud.database()
- const _ = db.command
- const $ = db.command.aggregate
- // 云函数入口函数
- exports.main = async (event, context) => {
- const {
- OPENID
- } = cloud.getWXContext()
- if (event.pub_id) {
- const messages = await db.collection('message')
- .aggregate()
- .match({
- pub_id: event.pub_id
- })
- .sort({
- publish_time: -1
- })
- .skip(event.page_token)
- .limit(event.page_size)
- .end()
- return {
- list: messages.list,
- next_page_token: event.page_token + messages.list.length,
- status: 'OK'
- }
- } else if (event.keyword) {
- const regexp = db.RegExp({
- regexp: event.keyword,
- options: 'i'
- })
- const messages = await db.collection('message')
- .aggregate()
- .match(_.or([{
- name: regexp
- }, {
- brief: regexp
- }, {
- detail: regexp
- }]))
- .sort({
- publish_time: -1
- })
- .skip(event.page_token)
- .limit(event.page_size)
- .lookup({
- from: 'publisher',
- localField: 'pub_id',
- foreignField: '_id',
- as: 'publisher'
- })
- .unwind('$publisher')
- .end()
- await db.collection('search')
- .add({
- data: {
- user_id: OPENID,
- keyword: event.keyword || '',
- search_time: new Date()
- }
- })
- return {
- list: messages.list,
- next_page_token: event.page_token + messages.list.length,
- status: 'OK'
- }
- } else if (event.hot) {
- const reads = await db.collection('read')
- .aggregate()
- .match(_.expr($.lt([$.subtract([new Date(), '$read_time']), 1000 * 60 * 60 * 24])))
- .group({
- _id: '$msg_id',
- total: $.sum(1)
- })
- .sort({
- total: -1
- })
- .limit(10)
- .lookup({
- from: 'message',
- localField: '_id',
- foreignField: '_id',
- as: 'message'
- })
- .unwind('$message')
- .lookup({
- from: 'publisher',
- localField: 'message.pub_id',
- foreignField: '_id',
- as: 'message.publisher'
- })
- .unwind('$message.publisher')
- .end()
- return {
- list: reads.list,
- status: 'OK'
- }
- } else if (event.favorite) {
- const messages = await db.collection('message')
- .aggregate()
- .lookup({
- from: 'favorite',
- let: {
- msg_id: '$_id'
- },
- pipeline: $.pipeline()
- .match(_.expr($.and([$.eq(['$msg_id', '$$msg_id']), $.eq(['$user_id', OPENID])])))
- .project({
- _id: 0,
- favorite_time: 1
- }).done(),
- as: 'favorite'
- })
- .unwind('$favorite')
- .skip(event.page_token)
- .limit(event.page_size)
- .lookup({
- from: 'publisher',
- localField: 'pub_id',
- foreignField: '_id',
- as: 'publisher'
- })
- .unwind('$publisher')
- .end()
- return {
- list: messages.list,
- next_page_token: event.page_token + messages.list.length,
- status: 'OK'
- }
- } else {
- const messages = await db.collection('message')
- .aggregate()
- .sort({
- publish_time: -1
- })
- .skip(event.page_token)
- .limit(event.page_size)
- .lookup({
- from: 'publisher',
- localField: 'pub_id',
- foreignField: '_id',
- as: 'publisher'
- })
- .unwind('$publisher')
- .end()
- return {
- list: messages.list,
- next_page_token: event.page_token + messages.list.length,
- status: 'OK'
- }
- }
- }
|