5

達成したいことが非常に明確であり、自分ですべてをコーディングする前に、mongoose/mongoDB ではそれが不可能であることを確認したかったのです。nodejs といくつかのフォーラムの mongoose-ttl をチェックしましたが、必要なものがまったく見つかりませんでした。ここにあります:

日付フィールド createDate を持つスキーマがあります。ここで、そのフィールドに TTL を配置したいと思います。これまでのところ、次のように実行できます (有効期限は 5000 秒):

しかし、コレクション内の他のドキュメントを変更せずに、ユーザーが好きなドキュメントに「賛成票」を投じて、それらのドキュメントの存続期間を長くできるようにしたいと考えています。それで、ユーザーがマングースまたは他の既存のnpm関連モジュールを使用してそのドキュメントが好きだと私に言ったら、どうにかしてSINGLEドキュメントのTTLを変更できますか?

ありがとうございました

4

2 に答える 2

30

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;
};
于 2015-09-15T12:40:20.337 に答える
1

mongodb の有効期限機能を使用できます。ドキュメントの有効期限を延長するたびに、有効期限を更新する必要があります。

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

于 2014-02-28T23:55:36.617 に答える