我可以在一段时间后从mongoDB文档中删除一个字段吗?

时间:2018-03-20 13:27:33

标签: node.js mongodb express mongoose

我有像猫头鹰一样的用户mongoose Schema

const userSchema = new mongoose.Schema({
login: {
    type: String
},
email: {
    type: String
},
password: {
    type: String
},
tokens: [
    {
        access: {
            type: String
        },
        token: {
            type: String,
        }
    }
],
});

我希望在一段时间后删除单个令牌对象,例如30秒。如果我添加带有expires属性的createAt字段

tokens: [
    {
        access: {
            type: String,
            required: true,
        },
        token: {
            type: String,
            required: true,
        },
        createdAt: {type:Date,default:Date.now,expires:10}
    }
],

然后结果:删除所有文档。有办法做我想做的事吗?

1 个答案:

答案 0 :(得分:0)

你可以使用post save钩子来做到这一点。 首先为令牌创建childSchema:

ChildTokenSchema = new mongoose.Schema(    {
    access: {
        type: String,
        required: true,
    },
    token: {
        type: String,
        required: true,
    },
    createdAt: {type:Date,default:Date.now,expires:10}
});

使用setTimeout:

在childModel上添加一个post-save挂钩
ChildTokenSchema.post('save', function(doc) {
 if (doc.createdAt && doc.createdAt.expires ) {
  setTimeout(doc.remove(), doc.createdAt.expires * 1000)
 }
});

修改您的父模式:

....
....
tokens: [ChildTokenSchema]
....