2014-01-07 83 views
4

子文檔一到期這是我的計劃:如何設置在貓鼬

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 
}); 

當我設置的「權威性」的路徑,MongoDB的刪除整個文件,但我想只刪除AUTH行時過期日期...這可能嗎?

對不起,我說西班牙語。

+2

不,那是不可能的。您需要將子文檔放入不同的文檔中。 – WiredPrairie

回答

5

您無法使用TTL索引在到期時刪除部分文檔。

但是,看起來您的authUserScheme真的比嵌入式文檔更像是一個會話概念。

一個更好的方法是使用一個referenceauthUserScheme給相關用戶,如:

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);