sql >> データベース >  >> NoSQL >> MongoDB

マングースはデータを期限切れにしますが、データベースに保持します

    スキーマリファレンスの概念を使用する必要があります このため。 期限切れを保存します 別のテーブルのフィールドに移動し、メインのuser_tableに参加します およびexpire_table (サンプル名)

    var UserSchema = new Schema({
        name: String,
        email: String
    });
    
    //save date by-default
    //expire in 1 min as in your example
    var expireSchema = new Schema({
        createdAt: { type: Date, default: Date.now, expires: '1m'  },
        user_pk: { type: Schema.Types.ObjectId, ref: 'user_expire'}
    });
    
    var userTable = mongoose.model('user_expire', UserSchema);
    var expireTable = mongoose.model('expireMe', expireSchema);
    
    //Save new user
    var newUser =  new userTable({
        name: 'my_name',
        email: 'my_email'
    });
    
    newUser.save(function(err, result) {
        console.log(result, 'saved')
        var newExpire =  new expireTable({
            user_pk:result._id
        });
        //use _id of new user and save it to expire table
        newExpire.save(function(err, result) {
            console.log('saved relation')
        })
    })
    

    セッションの有効期限が切れているかどうかを検出するようになりました

    1。データの有効期限が切れる前にこのコードを実行する場合

    expireTable.findOne()
    .populate('user_pk')
    .exec(function (err, result) {
        if (err) throw err;
        console.log(result)
        if(result == null) {
            console.log('session has expired, renew session')
        } else {
            console.log('session is active')
        }
    });
    
    //output - session is active
    

    2。データの有効期限が切れた後にこのコードを実行する場合

    expireTable.findOne()
    .populate('user_pk')
    .exec(function (err, result) {
        if (err) throw err;
        console.log(result)
        if(result == null) {
            console.log('session has expired, renew session')
        } else {
            console.log('session is active')
        }
    });
    
    //output - session has expired, renew session
    


    1. socket.io-redisの使用例

    2. Redisセンチネルによる高可用性:Redisマスター/スレーブセットへの接続

    3. meteorで個別のテストおよび開発データベースを設定する方法

    4. マングース:findOneAndUpdateは既存のフィールドを更新しません