1年以上経ちましたが、これは他の人にとって役立つかもしれないので、私の答えは次のとおりです。
エントリの削除後に猶予期間を設けて、ユーザーが後で操作をキャンセルできるようにするために、これと同じことを達成しようとしていました。
Mike Bennettが述べたように、TTL インデックスを使用して、ドキュメントを特定の時刻に失効させることができます。
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!"
} )
マングースの例
モデル
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 });
猶予期間付き削除
日付操作に瞬間を使用
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;
};
削除を元に戻す
日付操作に瞬間を使用
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;
};