如何在mongoose中设置子文档的过期

时间:2014-01-07 19:47:06

标签: mongodb mongoose

这是我的计划:

var authUserScheme = mongoose.Schema({
    token: String,
    ip: String,
    valid: {type: Date, default: Date.now(), expires: '1m' },   
}, {_id: false});

var usersSchema = mongoose.Schema({
// OTHER THINGS
     auth : [ authUserScheme ],
// other things
});

当我设置'auth'路径时,mongodb删除整个文档,但我想在过期日期时只删除auth行...这可能吗?

对不起我的英语,我说西班牙语。

1 个答案:

答案 0 :(得分:5)

您无法在到期时使用TTL索引删除部分文档。

但是,看起来你的authUserScheme实际上更像是一个会话概念而不是嵌入式文档。

更好的方法是使用authUserScheme中的reference与相关用户,例如:

var authUserSchema = mongoose.Schema({
    token: String,
    ip: String,
    valid: {type: Date, default: Date.now(), expires: '1m' },
    user: { type: Number, ref: 'User' }
});

var userSchema = mongoose.Schema({
    name: String,
    // Other fields
})

var AuthUser  = mongoose.model('AuthUser', authUserSchema);
var User = mongoose.model('User', userSchema);