You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在AWS DocumentDB中基于存活时间筛选过期数据?

解决方案

你的错误写法{"insertTime"+endTime:{ $lt: deletionDate}}属于语法错误,MongoDB(及兼容的AWS DocumentDB 4.0.0)不支持直接拼接字段名进行计算。要实现字段间的日期运算对比,需要使用$expr操作符来嵌入聚合表达式。

根据你的需求场景,分两种情况给出正确写法:

情况1:所有记录存活期固定为60天

如果需求是删除当前时间超过 insertTime + 60天 的文档(即记录已过固定存活期),可以使用以下查询:

var currentDate = new Date();
db.testdata.find({
  $expr: {
    $gt: [
      currentDate,
      { $add: ["$insertTime", 60 * 24 * 60 * 60 * 1000] } // 60天转换为毫秒数
    ]
  }
})

情况2:每个记录有独立存活天数(文档含endTime字段,存储天数)

如果endTime是每个文档的专属字段(不同记录存活期不同),需要动态计算单条文档的insertTime + endTime天,再判断是否超过当前时间:

var currentDate = new Date();
db.testdata.find({
  $expr: {
    $gt: [
      currentDate,
      { $add: ["$insertTime", { $multiply: ["$endTime", 24 * 60 * 60 * 1000] }] }
    ]
  }
})

补充:针对你描述的“删除早于存活时间减60天的文档”

如果你的真实需求是删除insertTime早于「存活时间基准 - 60天」的文档,可调整为如下逻辑:

var survivalBaseDate = new Date(); // 你的存活时间基准日期
var deletionThreshold = new Date(survivalBaseDate.setDate(survivalBaseDate.getDate() - 60));
db.testdata.find({ "insertTime": { $lt: deletionThreshold } })

内容的提问来源于stack exchange,提问作者coding_newbie

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 18:15:59