首页 > 解决方案 > 从 mongo db 集合中删除记录的 Cron 作业

问题描述

我有一个具有以下记录结构的 mongodb 集合:

{
  "_id": {
    "$oid": "6038930b613474692f48f81e"
  },
  "sender_id": "default",
  "active_form": {},
  "followup_action": null,
  "latest_action_name": "action_listen",
  "latest_event_time": 1614320506.277497,
  "latest_input_channel": "cmdline",
  "paused": false
}

我想删除latest_event_time从现在起超过 2 年的所有记录,作为定期运行的 cron 作业的一部分。我现在无法更新这些字段的数据类型。的数据类型latest_event_time是双精度,它存储时间戳值。如何通过比较latest_event_time字段时间戳值来解决此问题以删除所有记录。

标签: mongodbmongodb-query

解决方案


我能够清除旧记录的方法是使用聚合函数将 latest_event_time 转换为日期格式,然后收集它。然后,我们将立即删除所有此类记录。

var today = new Date();
var requiredDay = new Date(today.getTime() - (150*24*60*60*1000));
var idsList = db.conversations.aggregate([
    {
     $addFields: {
       my_event_time: { "$toDate": {
          "$multiply": [
            "$latest_event_time",
            1000
          ]
        }}
     }
   },
    { $match: { my_event_time: { $lt: requiredDay } } }
  ]).map(function(d) {
    return d._id;
  });


db.conversations.remove({ _id: { $in: idsList } });

推荐阅读