我有一个非常肯定的事情我想完成,我想确保在我去自己编码整个事情之前在mongoose / mongoDB中是不可能的。 我检查了mongoose-ttl的nodejs和几个论坛,并没有找到我需要的东西。 这是:
我有一个带有日期字段createDate的模式。现在我希望在那个领域放置一个TTL,到目前为止一直很好,我可以这样做(在5000秒内到期): createDate:{type:Date,default:Date.now,expires:5000}
但我希望我的用户能够“投票”他们喜欢的文档,这样这些文档将会有更长的生存时间,而不会更改我的收藏中的其他文档。 那么,一旦用户告诉我他喜欢使用mongoose或其他现有的npm相关模块的文档,我能以某种方式更改单个文档的TTL吗?
谢谢
答案 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 });
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