微信小程序 云数据库 Collection/Query .orderBy 用法

微信云数据库排序
了解如何使用微信云数据库的orderBy函数对集合进行单字段或多字段排序,掌握升序和降序的设置方法。

Collection.orderBy / Query.orderBy

指定查询排序条件

方法签名如下:

function orderBy(fieldName: string, order: string): Collection | Query

方法接受一个必填字符串参数fieldName用于定义需要排序的字段,一个字符串参数order定义排序顺序。order只能取ascdesc

如果需要对嵌套字段排序,需要用 “点表示法” 连接嵌套字段,比如style.color表示字段style里的嵌套字段color

同时也支持按多个字段排序,多次调用orderBy即可,多字段排序时的顺序会按照orderBy调用顺序先后对多个字段排序

示例代码:

  • 一个字段排序:按进度排升序取待办事项
const db = wx.cloud.database()
db.collection('todos').orderBy('progress', 'asc')
  .get()
  .then(console.log)
  .catch(console.error)
  • 多个字段排序:
    先按progress排降序(progress越大越靠前)、再按description排升序(字母序越前越靠前)取待办事项:
const db = wx.cloud.database()
db.collection('todos')
  .orderBy('progress', 'desc')
  .orderBy('description', 'asc')
  .get()
  .then(console.log)
  .catch(console.error)

原文:微信官方文档 · 小程序 -> 云开发 -> 数据库 -> Collection.orderBy / Query.orderBy

<think>我们正在开发一个校园失物招领微信小程序,并希望使用云函数来实现相关功能。云函数是微信小程序云开发的一部分,它允许我们在云端运行代码,无需搭建服务器,可以方便地操作数据库、存储等。 根据引用[5],我们知道微信小程序框架由视图层和逻辑层组成,而云函数可以放在逻辑层处理一些复杂的业务逻辑,比如数据库操作、文件处理等。 在校园失物招领小程序中,我们可能需要实现以下功能: 1. 用户发布失物信息或招领信息 2. 信息列表展示 3. 搜索功能 4. 用户留言反馈 5. 管理员管理信息等 云函数可以用于: - 数据库的增删改查操作(特别是复杂的操作,如事务、聚合等) - 敏感操作(如权限验证,避免在前端直接操作数据库) - 定时任务(如定期清理过期信息) 下面我将给出几个关键云函数的示例: ### 1. 发布失物信息 当用户发布一条失物信息时,我们可以通过云函数来添加记录,并在添加前进行一些验证。 ```javascript // 云函数:addLostItem const cloud = require('wx-server-sdk') cloud.init({ env: cloud.DYNAMIC_CURRENT_ENV }) const db = cloud.database() exports.main = async (event, context) => { const { title, category, description, contact, location, imageUrl } = event const userInfo = event.userInfo // 来自调用云函数的用户信息 // 验证数据 if (!title || !category || !description || !contact) { return { code: 400, message: '缺少必要字段' } } try { const result = await db.collection('lost_items').add({ data: { title, category, description, contact, location, imageUrl, status: '未找到', // 初始状态 createTime: new Date(), updateTime: new Date(), userId: userInfo.openId // 记录发布者 } }) return { code: 200, message: '发布成功', data: result } } catch (e) { return { code: 500, message: '服务器错误' } } } ``` ### 2. 获取失物列表 我们可能需要一个云函数来获取失物列表,并支持分页和条件查询。 ```javascript // 云函数:getLostItems const cloud = require('wx-server-sdk') cloud.init({ env: cloud.DYNAMIC_CURRENT_ENV }) const db = cloud.database() exports.main = async (event, context) => { const { page = 1, pageSize = 10, category, keyword } = event const skip = (page - 1) * pageSize let query = db.collection('lost_items').where({ status: '未找到' // 只展示未找到的 }) if (category) { query = query.where({ category }) } if (keyword) { query = query.where({ // 使用正则表达式进行模糊匹配,或者使用数据库索引(需要提前设置索引) title: db.RegExp({ regexp: keyword, options: 'i' }) }) } try { const listResult = await query.skip(skip).limit(pageSize).orderBy('createTime', 'desc').get() const totalResult = await query.count() return { code: 200, data: { list: listResult.data, total: totalResult.total } } } catch (e) { return { code: 500, message: '服务器错误' } } } ``` ### 3. 用户留言反馈 用户可以在某条失物信息下留言,我们可以使用云函数来添加留言,同时更新失物信息的留言数。 ```javascript // 云函数:addComment const cloud = require('wx-server-sdk') cloud.init({ env: cloud.DYNAMIC_CURRENT_ENV }) const db = cloud.database() exports.main = async (event, context) => { const { itemId, content } = event const userInfo = event.userInfo if (!itemId || !content) { return { code: 400, message: '参数错误' } } try { // 开启事务 const result = await db.runTransaction(async transaction => { // 添加留言 const commentRes = await transaction.collection('comments').add({ data: { itemId, content, userId: userInfo.openId, createTime: new Date() } }) // 更新失物信息的留言数 const item = await transaction.collection('lost_items').doc(itemId).get() const commentCount = (item.data.commentCount || 0) + 1 await transaction.collection('lost_items').doc(itemId).update({ data: { commentCount, updateTime: new Date() } }) return commentRes }) return { code: 200, message: '留言成功', data: result } } catch (e) { return { code: 500, message: e.message } } } ``` ### 4. 定时任务(云函数触发器) 我们可以设置一个定时任务,每天检查过期的失物信息(比如超过30天未更新的),将其状态标记为“已过期”。 首先,在云函数目录下新建一个云函数,比如`checkExpiredItems`,然后在`config.json`中配置触发器: ```json { "triggers": [ { "name": "timer", "type": "timer", "config": "0 0 0 * * * *" // 每天0点触发 } ] } ``` 云函数代码: ```javascript // 云函数:checkExpiredItems const cloud = require('wx-server-sdk') cloud.init({ env: cloud.DYNAMIC_CURRENT_ENV }) const db = cloud.database() const _ = db.command exports.main = async (event, context) => { // 计算30天前的日期 const expiredDate = new Date() expiredDate.setDate(expiredDate.getDate() - 30) try { const result = await db.collection('lost_items').where({ status: '未找到', updateTime: _.lt(expiredDate) }).update({ data: { status: '已过期' } }) return { code: 200, message: `更新了${result.stats.updated}条记录` } } catch (e) { return { code: 500, message: e.message } } } ``` ### 注意事项 1. 云函数的部署:在微信开发者工具中,可以右键点击云函数目录选择“上传并部署”。 2. 权限控制:在云函数中,我们可以通过`event.userInfo`获取调用者的openId,从而进行权限验证。 3. 数据库操作:云函数可以直接操作数据库,且拥有所有权限,因此要注意安全性,避免被恶意调用。 4. 云函数环境:初始化时指定环境,通常使用`cloud.DYNAMIC_CURRENT_ENV`表示当前环境。 5. 触发器配置:定时触发器需要在云函数的配置文件中设置,然后上传触发器配置。 通过以上几个云函数的示例,我们可以实现校园失物招领小程序的核心功能。当然,根据实际需求,可能还需要更多的云函数,比如用户登录、信息删除、状态更新等。 §§相关问题§§ 1. 如何在小程序端调用云函数? 2. 云函数如何实现用户权限验证? 3. 云函数如何操作数据库事务? 4. 如何设置云函数的定时触发器?</think>### 校园失物招领微信小程序云函数开发实现 在开发校园失物招领微信小程序时,云函数是实现核心业务逻辑的关键技术。以下是完整的开发指南: #### 一、云函数核心功能设计 1. **失物信息管理** ```javascript // 发布失物信息云函数 exports.main = async (event, context) => { const db = cloud.database(); return await db.collection('lost_items').add({ data: { title: event.title, category: event.category, // 引用[4]中的失物分类 description: event.desc, location: event.location, contact: event.contact, status: 'pending', // 状态:待认领 createTime: new Date(), openid: cloud.getWXContext().OPENID } }); } ``` 2. **招领匹配功能** ```javascript // 智能匹配云函数 exports.matchItems = async (event) => { const db = cloud.database(); const _ = db.command; return await db.collection('lost_items') .where(_.or([ { title: db.RegExp({ regexp: event.keyword }) }, { description: db.RegExp({ regexp: event.keyword }) } ])) .get(); } ``` 3. **消息通知服务** ```javascript // 微信模板消息通知 exports.sendNotification = async (event) => { const res = await cloud.openapi.subscribeMessage.send({ touser: event.openid, templateId: '通知模板ID', data: { thing1: { value: event.item_title }, thing2: { value: '您的失物可能有匹配结果' } } }); return res; } ``` #### 二、云函数集成架构 ```mermaid graph TD A[微信小程序] --> B[云函数层] B --> C1(失物发布) B --> C2(信息匹配) B --> C3(消息通知) C1 --> D[云数据库] C2 --> D C3 --> E[微信服务端] ``` #### 三、关键实现步骤 1. **初始化云环境** 在`app.js`中配置: ```javascript wx.cloud.init({ env: 'your-env-id', traceUser: true }) ``` 2. **数据库设计参考** | 字段 | 类型 | 说明 | |---|---|---| | title | String | 物品名称 | | category | String | 引用[4]中的失物分类 | | location | String | 丢失地点 | | status | String | 状态(待认领/已认领) | | createTime | Date | 发布时间 | 3. **安全规则配置** ```json { "lost_items": { ".read": true, ".write": "auth.openid == resource.openid" } } ``` #### 四、性能优化方案 1. **索引优化** ```javascript db.collection('lost_items').where({ category: '电子产品' }).createIndex() ``` 2. **定时触发器** 在`config.json`中添加: ```json { "triggers": [{ "name": "cleanup", "type": "timer", "config": "0 0 3 * * *" // 每天凌晨3点清理过期数据 }] } ``` #### 五、部署与调试 1. 使用微信开发者工具上传云函数 2. 通过云开发控制台监控调用情况 3. 使用`wx.cloud.callFunction`调用示例: ```javascript wx.cloud.callFunction({ name: 'publishItem', data: { title: '校园卡', category: '证件' } }) ``` > **最佳实践**: > 1. 敏感操作(如删除)需在云函数中验证用户权限 > 2. 使用云函数本地调试功能加速开发 > 3. 结合引用[5]的Mina框架实现数据绑定更新 [^1]: 微信小程序校园系统功能设计原则 [^4]: 失物分类管理模块设计 [^5]: 微信小程序Mina框架数据绑定机制
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值