mongoose - 更改单个文档的ttl

时间:2014-02-28 21:34:35

标签: mongoose ttl

我有一个非常肯定的事情我想完成,我想确保在我去自己编码整个事情之前在mongoose / mongoDB中是不可能的。 我检查了mongoose-ttl的nodejs和几个论坛,并没有找到我需要的东西。 这是:

我有一个带有日期字段createDate的模式。现在我希望在那个领域放置一个TTL,到目前为止一直很好,我可以这样做(在5000秒内到期): createDate:{type:Date,default:Date.now,expires:5000}

但我希望我的用户能够“投票”他们喜欢的文档,这样这些文档将会有更长的生存时间,而不会更改我的收藏中的其他文档。 那么,一旦用户告诉我他喜欢使用mongoose或其他现有的npm相关模块的文档,我能以某种方式更改单个文档的TTL吗?

谢谢

2 个答案:

答案 0 :(得分:15)

已经超过一年,但这可能对其他人有用,所以这是我的回答:

我正在尝试完成同样的事情,以便在删除条目后允许宽限期,以便用户可以在之后取消操作。

Mike Bennett所述,您可以使用TTL索引making documents expire at a specific clock time

哟必须创建一个索引,将.popover form.form-horizontal .form-group label.col-sm-2.control-label(for='inputEmail3') Email .col-sm-10 input#inputEmail3.form-control(type='email', placeholder='Email') .form-group label.col-sm-2.control-label(for='inputPassword3') Password .col-sm-10 input#inputPassword3.form-control(type='password', placeholder='Password') .form-group .col-sm-offset-2.col-sm-10 .checkbox label input(type='checkbox') | Remember me .form-group .col-sm-offset-2.col-sm-10 button.btn.btn-default(type='submit') Sign in 设置为零:

expireAfterSeconds

这不会影响集合中的任何文档,除非您在特定文档上设置expireAfterSeconds,如下所示:

db.yourCollection.createIndex({ "expireAt": 1 }, { expireAfterSeconds: 0 });

mongoose中的示例

模型

db.log_events.insert( {
   "expireAt": new Date('July 22, 2013 14:00:00'),
   "logEvent": 2,
   "logMessage": "Success!"
} )

宽限期删除

使用moment进行日期操作

var BeerSchema = new Schema({
  name: {
    type: String,
    unique: true,
    required: true
  },
  description: String,
  alcohol: Number,
  price: Number,
  createdAt: { type: Date, default: Date.now }
  expireAt: { type: Date, default: undefined } // you don't need to set this default, but I like it there for semantic clearness
});

BeerSchema.index({ "expireAt": 1 }, { expireAfterSeconds: 0 });

还原删除

使用moment进行日期操作

exports.deleteBeer = function(id) {
  var deferred = q.defer();

  Beer.update(id, { expireAt: moment().add(10, 'seconds') }, function(err, data) {
    if(err) {
      deferred.reject(err);
    } else {
      deferred.resolve(data);
    }
  });
  return deferred.promise;
};

答案 1 :(得分:1)

您可以在mongodb中使用时钟时间过期功能。每次要延长文档的到期时,都必须更新过期时间。

http://docs.mongodb.org/manual/tutorial/expire-data/#expire-documents-at-a-certain-clock-time