gpt4 book ai didi

mongoose - 更改单个文档的 ttl

转载 作者:行者123 更新时间:2023-12-03 18:09:56 27 4
gpt4 key购买 nike

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

我有一个带有日期字段 createDate 的架构。现在我希望在该字段上放置一个 TTL,到目前为止一切顺利,我可以这样做(5000 秒后到期):
createDate: {type: Date, 默认: Date.now, expires: 5000}

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

谢谢你

最佳答案

已经一年多了,但这可能对其他人有用,所以这是我的答案:

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

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

你必须创建一个索引,设置 expireAfterSeconds归零:

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

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

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

Mongoose 的例子

模型

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;
};

恢复删除

用途 moment用于日期操作

exports.undeleteBeer = function(id) {
var deferred = q.defer();
// Set expireAt to undefined
Beer.update(id, { $unset: { expireAt: 1 }}, function(err, data) {
if(err) {
deferred.reject(err);
} else {
deferred.resolve(data);
}
});
return deferred.promise;
};

关于mongoose - 更改单个文档的 ttl,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22106271/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com