Mongodb 实现数据自动在后台删除--根据一个截止时间

题记:项目中要加的内容,可以实现对设备的预定,被某个用户预定后的设备就不能再被其他用户所使用了,用户预定的时候就需要输入预定时间,web前端用到了boostrap的date的一个插件,非常好用,接下来就总结下,mongodb数据库实现后台删除的方法。
参考资料:http://docs.mongoing.com/manual/tutorial/expire-data.html

有两种法:

1 使文档在一定的秒数后过期

如下操作在 log_events 集合的 createdAt 字段创建了一个索引并指定 expireAfterSeconds 的值为 3600 以使过期时间为 createdAt 指定的时间之后的一小时。

db.log_events.ensureIndex( { "createdAt": 1 }, { expireAfterSeconds: 3600 } )

当向 log_events 集合添加文档时,设置 createdAt 字段为当前时间:

db.log_events.insert( {
   "createdAt": new Date(),
   "logEvent": 2,
   "logMessage": "Success!"
} )

2 使文档在确定的时钟时间过期

如下操作在 log_events 集合的 createdAt 字段创建了一个索引并指定 expireAfterSeconds 的值 0

对于每个文档,设置 expireAt 的值与文档过期的时间一致。举例来说,如下的 insert() 操作添加了一个将在 2013年7月22号 14:00:00 过期的文档。
db.log_events.insert( {
   "expireAt": new Date('July 22, 2013 14:00:00'),
   "logEvent": 2,
   "logMessage": "Success!"
} )
当某文档的 expireAt 字段的值晚于 expireAfterSeconds``中指定的秒数时——在本例中也就是  ``0 ,MongoDB会自动从 log_events 集合删除该文档。因此,数据在指定的 expireAt 值过期。

此外,用java实现上面的第2个方法,如下所示:

下面的formatDate()这个函数是我自己写一个格式化日期的,因为我在web输入的格式和mongodb要求的格式不同,所以要转成mongodb识别的格式:July 31, 2015 16:00:00

public String addReserve(String reservename, String reserveip,String starttime, String endtime, String reserver) {
        // TODO Auto-generated method stub
        //31 July 2015 - 11:00 am
        BasicDBObject date_index = new BasicDBObject("date",1);
        BasicDBObject ensure = new BasicDBObject("expireAfterSeconds", 0);
        collectionReserve.ensureIndex(date_index, ensure);
        DBObject query1 = new BasicDBObject();
        String time1 = formatDate(endtime);//time1:July 31, 2015 16:00:00
        query1.put("date",new Date(time1));
        query1.put("reservename", reservename);
        query1.put("reserveip", reserveip);
        query1.put("starttime", starttime);
        query1.put("endtime", endtime);
        query1.put("reserver", reserver);
        collectionReserve.insert(query1);
        return "success";
    }


例如,如下操作在 log_events 集合的 createdAt 字段创建了一个索引并指定 expireAfterSeconds 的值 0
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Frank范

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值