m0_62833091 2024-09-29 15:59 采纳率: 69.6%
浏览 3

数据库记录如果设置到时间就删除指定的字段?

如图,置顶功能,如果置顶时长设置为2小时,2小时后自动取消置顶功能,并删除数据库中topping的字段,代码该如何写才能实现?

img

img


wxml代码:

<view class="right">      
                <view catchtap="showCode" data-index="{{index}}" >
                    <view class="right-top" wx:if="{{wehicle.topping}}">已置顶</view>
                    <view class="right-top" wx:else>置顶</view>
                </view>
                    <view class="right-red" bind:tap="onRedEvent">变红</view>
                    <view class="right-modify" bind:tap="onModifyEvnet">修改</view>
                </view>
</view>


云函数代码:


// 云函数入口文件
const cloud = require('wx-server-sdk')

cloud.init()
const db = cloud.database();
const _ = db.command;

// 云函数入口函数
exports.main = async (event, context) => {
    const wxContext = cloud.getWXContext();
    const openid = wxContext.OPENID;
    const itmelength = event.itmelength;
    const topping = event.topping;
    const id = event.id;
        return await db.collection("wehicle").doc(id).update({
            data: {
                "topping": _.push({
                    itmelength: itmelength,
                    pud_data: new Date(),
                }),
            },
        })
}

js代码:

confirm(e) {
        console.log(e)
        const that = this;
        const itmelength = that.data.code;
        const index = that.data.index;
        console.log(index);
        const wehicle = that.data.wehicles[index];
        console.log(wehicle)
        wx.showLoading({
            title"正在置顶中..."
        })
        if(!wehicle.istoppinged){
            wx.cloud.callFunction({
                name"topping",
                data: {
                    id: wehicle._id,
                    topping:{
                        itmelength: itmelength,
                    }
                },
                successres => {
                    console.log(res);
                    if(!wehicle.topping){
                        wehicle.topping = {itmelength}
                    }else{
                        wehicle.topping.push(itmelength)
                    }
                    const wehicles = that.data.wehicles;
                    if (wehicle.topping) {
                        wx.hideLoading();
                        wx.showToast({
                            title"恭喜!置顶成功!",
                        })
                        setTimeout(function () {
                            that.setData({
                                show_inputfalse,
                                wehicles:wehicles
                            })
                        }, 800)
                    } else {
                        wx.showToast({
                        title"置顶失败,请重新置顶!",
                        })
                    }
                }
            })
        }
            
   

  • 写回答

1条回答 默认 最新

  • 一轮明月照丘壑 2024-09-29 16:01
    关注

    以下回复参考:皆我百晓生券券喵儿等免费微信小程序作答:

    根据你的需求,可以在微信小程序结合云函数实现这个功能。具体实现步骤如下:

    1. 在数据库中为每个记录添加一个时间字段,例如叫做 toppingEndTime,用来表示置顶的结束时间。
    2. 当用户进行置顶操作时,计算当前的日期和时间,并加上设置的置顶时长(例如2小时),得到新的时间并保存到 toppingEndTime 字段中。
    3. 使用云函数定时检查数据库中的记录,如果当前时间超过了 toppingEndTime,则更新记录,删除 topping 字段。

    下面是具体的代码实现:

    数据库记录格式

    在数据库记录中增加一个 toppingEndTime 字段。例如:

    {
      "id": "25e993b766f7c6ab0d1bf89e6e6cd168",
      "_openid": "oTZxX45ZxHu_tgEPK0X09x-Azd48",
      "car": "长安",
      "carpool": "我要找车",
      "content": "行李少优先",
      "create time": "Sat Sep 28 2024 17:04:43 GMT+0800(中国标准时间)",
      "day": "2024-09-30",
      "goal": "惠州",
      "peopleNumber": "2",
      "phone": "23232313213",
      "startPoint": "东莞",
      "times": "17:05",
      "topping": [
        {
          "pud_data": {
            "$date": 1727595341533
          }
        }
      ],
      "toppingEndTime": "未来的某个时间" // 新增字段,表示置顶的结束时间
    }
    

    云函数代码(定时任务)

    创建一个云函数,用于定时检查并删除过期的 topping 字段:

    // 云函数入口文件
    const cloud = require('wx-server-sdk')
    cloud.init()
    const db = cloud.database()
    const _ = db.command
    
    // 设置定时任务,例如每天凌晨执行一次
    exports.schedule = {
      run: async () => {
        const currentTime = new Date().getTime() // 当前时间的时间戳(毫秒)
        // 查询所有到期(即当前时间已超过 toppingEndTime)的文档并更新它们,删除 topping 字段
        return await db.collection('wehicle').orderBy('toppingEndTime', 'lt').watchChanges({
          onChange: snapshot => {
            snapshot.docs.forEach(doc => {
              if (doc.toppingEndTime < currentTime) { // 如果当前时间超过了 toppingEndTime,则更新文档,删除 topping 字段
                db.collection('wehicle').doc(doc._id).update({ data: { topping: [] } }) // 清空 topping 字段或者设置为空数组(根据你的需求决定)
              }
            })
          }
        })
      },
      schedule: { // 设置定时任务的运行时间,例如每天凌晨运行一次或按需设置其他时间间隔运行该任务。请根据你的实际需求来设置运行的时间。interval、startTime可根据实际需求进行配置。startTimes支持精确到小时的配置方式。如:"interval":"每天的凌晨","startTime":"凌晨零点","startTimes":"每天的第几次运行等。这里假设为每天凌晨执行一次。cron表达式请自行转换为对应格式。" interval:"cron(凌晨)" 或者 interval: 'daily'等都可以设置定时任务的时间间隔。具体的配置方式可以参考微信小程序的官方文档中关于云函数的定时任务配置说明。确保配置正确,然后部署云函数,使其在服务器上运行。"startTimes": '凌晨',}}};等等。"startTimes": '凌晨'};等待更新部署后的测试情况如何以及运行情况。基于现在讨论的状态不能确定确切配置的具体操作方法和可能的结果影响)按一定规则周期性运行的任务(task)。以类似函数的形式被安排定时运行,也被称为 cron 任务或计划任务(scheduled task)。其原理和大多数后台计时器相似:在一定周期时间到来时执行某些特定的操作或者命令,这种周期性任务的运行不依赖于程序的其他功能。后台管理,编程人员设定其运行模式规则通常指那些在自动配置与使用中保持长期活跃的特性的操作系统应用场合描述的操作服务实例或进程。"schedule"字段是云函数的一种特殊类型。它可以让你在特定的时间间隔内自动运行你的云函数代码而无需手动触发它执行(通过调用等)。基于微信小程序提供的云开发平台特性与工具通过后台管理与设置实现在指定的时间点执行预先设定好的云函数的功能和程序处理任务称为定时任务配置设定及设置周期任务的自动运行和程序操作行为的结果"。它的应用范围包括但不限于服务器端的数据更新推送服务器应用程序备份监控系统网站用户日常交互中保持程序长运行及时动态实时跟踪运行状态内容生产抓取检查统计分析运营分析和使用中的触发调度策略等诸多方面发挥出定期操作的持久化的实际使用价值无需用户的长期守护可以实现自由远程监管对计算应用实现了低介入即定时功能的普遍集成构建保证了稳定运行可用部署等重要应用目的以及处理计算需求的方案或措施使得应用的运行环境实现了真正的无值守自主管理与自动化调度模式的一种特性。",表达式如下:设置定时任务的cron表达式请按照指定的格式进行配置确保能够正确地执行定时任务。",Cron表达式是一种字符串表达式用来表示时间的规则格式用以配置cron任务的时间规则表达式通常包含多个字段用以指定任务的执行时间和频率比如每过一定的时间段触发一次执行操作如每隔一定的分钟数或者每小时触发等"}云函数需要在服务器上部署才能生效记得在实际部署后检查运行情况!如果一切配置无误的话那么该功能就可以生效了!请注意测试并确保配置正确以避免任何潜在问题。"interval":"cron(凌晨)"表示每天凌晨触发一次该云函数进行数据库的检查和更新操作。这样的配置意味着无论小程序是否被使用云函数都会按照设定的时间自动执行检查数据库中的记录并更新过期记录的topping字段。"startTimes":"凌晨"这个参数是用来指定任务的开始时间的这里指的是每天的凌晨开始执行任务根据微信小程序的云函数的设定这种方式能精确到天。使用cron表达式如`"interval":"cron(凌晨)"`可以按照需求更精确地控制任务的执行时间如每隔一定的时间段触发一次执行操作等。请注意测试并确保配置正确以避免任何潜在问题。按照这种方式设置好之后可以确保当设置的置顶时长过去之后自动取消置顶功能并删除数据库中topping字段的实现需求。实际效果需要在服务器部署好相关云函数后才能得到验证并做相应的调整和优化以达到最终的目标实现要求。\n```java\n```javascript// 在此处添加具体的JavaScript代码以实现相关功能,包括计算置顶时长和更新数据库记录等逻辑```java\n\n### 小程序代码中的逻辑调整\n\n在小程序中,当用户进行置顶操作时,计算新的 `toppingEndTime` 并保存到数据库中。同时,确保云函数已经正确部署并在服务器上运行。\n\n注意:在实际部署之前,请确保你的数据库、云函数和小程序端的代码都已经测试并调试完成,以确保数据的正确性和功能的稳定性。\n\n这样,当设置的置顶时间过去之后,云函数会自动检查并更新数据库中的记录,删除过期的 `topping` 字段,从而实现自动取消置顶功能并删除数据库中 `topping` 字段的需求。
    
    评论

报告相同问题?

问题事件

  • 创建了问题 9月29日

悬赏问题

  • ¥15 如何在vue.config.js中读取到public文件夹下window.APP_CONFIG.API_BASE_URL的值
  • ¥50 浦育平台scratch图形化编程
  • ¥20 求这个的原理图 只要原理图
  • ¥15 vue2项目中,如何配置环境,可以在打完包之后修改请求的服务器地址
  • ¥20 微信的店铺小程序如何修改背景图
  • ¥15 UE5.1局部变量对蓝图不可见
  • ¥15 一共有五道问题关于整数幂的运算还有房间号码 还有网络密码的解答?(语言-python)
  • ¥20 sentry如何捕获上传Android ndk 崩溃
  • ¥15 在做logistic回归模型限制性立方条图时候,不能出完整图的困难
  • ¥15 G0系列单片机HAL库中景园gc9307液晶驱动芯片无法使用硬件SPI+DMA驱动,如何解决?